【发布时间】:2023-02-24 19:29:58
【问题描述】:
我有一个 df 列表,其中包含不同的变量。
最后,我想从数据框和变量的子选择中得到一个合成数据框,并将其合并为一个。 我有另一个 df,其中包含感兴趣的变量列表和相应的表。
当然,要在简单的 df 上进行选择,只需进行 select(colnames(.) %in% VarSel$Var) 并对所有 df 进行选择,然后进行连接... 但是,就目前而言,我不能直接在所选 df 列表中的 purrr 中执行此操作。
你知道如何正确地做到这一点吗?
# reprex
## a list of df
list_df <- list(A = data.frame(ID = letters[1:10],
Var1 = rnorm(10),
Var2 = rnorm(10),
Var3 = rnorm(10)),
B = data.frame(ID = letters[1:10],
Var1 = rnorm(10),
VarY = rnorm(10),
VarX = rnorm(10)),
D = data.frame(ID = letters[5:14],
Var1 = rnorm(10),
VarZ = rnorm(10),
Var3 = rnorm(10)),
E = data.frame(ID = letters[3:12],
Var1 = rnorm(10),
VarK = rnorm(10),
Var3 = rnorm(10)))
## a df for variables & df selection
VarSel <- data.frame(Var = c("ID", "VarZ", "Var3", "Var3", "VarK"),
Df = c("all", "D", "A", "D", "E"))
# the 3 operations that I want to perform (I simply managed the first one)
list_df %>%
keep(names(.) %in% unique(VarSel$Df))# keep only df named in VarSel
# then select matching variable names for thoses DF (not forgetting the ID one)
# finally produce a synthesis Df joining A & D and variables of interest (ID, VarZ, Var3, Var3)
# desired output
output <- full_join(list_df[["A"]], list_df[["D"]], by = "ID") %>%
full_join(.,list_df[["E"]], by= "ID") %>%
select(ID, VarZ, Var3_A = Var3.x, Var3_D = Var3.y, VarK)
【问题讨论】:
-
我尝试了几种在 map() 中使用 select 和 %in% 函数的方法,但我没有成功......
标签: r list select tidyverse purrr