我希望将 R 中的数据框和列表与多个条件(列“Variable”以及“Variable_”)合并在一起。
想要合并包含 3 个组的列表,每个组包含 V1-V5 和 V1_-V5_:
和数据框:
我希望最终输出看起来像上面的数据框,但有两个新列,一列包含列表“Variable”的值,另一列包含“Variable_”的值
按一个条件合并的代码按“变量”合并
List |>
unlist() |>
enframe() |>
separate_wider_delim(cols = name, names = c("Group", "Variable"), delim = ".") |>
right_join(data)
data = structure(list(Col.A = c("x", "x", "x", "x", "x", "x", "x", "x",
"x", "x", "x", "x", "x", "x", "x"), Col.B = c("x", "x", "x",
"x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x", "x"),
Group = c("Group1", "Group1", "Group1", "Group1", "Group1",
"Group2", "Group2", "Group2", "Group2", "Group2", "Group3",
"Group3", "Group3", "Group3", "Group3"), Variable_ = c("V1_",
"V2_", "V3_", "V4_", "V5_", "V1_", "V2_", "V3_", "V4_", "V5_", "V1_",
"V2_", "V3_", "V4_", "V5_"), Variable = c("V1",
"V2", "V3", "V4", "V5", "V1", "V2", "V3", "V4", "V5", "V1",
"V2", "V3", "V4", "V5")), class = "data.frame", row.names = c(NA,
-15L))
List = list(GROUP1 = list(V1 = 0.857138, V2 = 1, V3 = 0.5,
V4 = "not limiting", V5 = 0.1),
Group2 = list(V1 = 0.65, V2 = 1, V3 = 1,
V4 = 0.6, V5 = 0.25),
Group3 = list(V1 = 0.65, V2 = 0.75, V3 = 0.3,
V4 = 1, V5 = 1),
GROUP1 = list(V1_ = "x", V2_ = "x", V3_ = "x",
V4_ = "x", V5_ = "x"),
Group2 = list(V1_ = "x", V2_ = "x", V3_ = "x",
V4_ = "x", V5_ = "x"),
Group3 = list(V1_ = "x", V2_ = "x", V3_ = "x",
V4_ = "x", V5_ = "x"))
unlist()
将您的列表放入命名查找表中,然后使用 paste()
或 Group
Variable
Variable_
对其进行索引:
library(dplyr)
library(stringr)
lookup <- List |>
setNames(str_to_title(names(List))) |>
unlist()
data |>
mutate(
Value = lookup[paste(Group, Variable, sep = ".")],
Value_ = lookup[paste(Group, Variable_, sep = ".")]
)
结果:
Col.A Col.B Group Variable_ Variable Value Value_
1 x x Group1 V1_ V1 0.857138 x
2 x x Group1 V2_ V2 1 x
3 x x Group1 V3_ V3 0.5 x
4 x x Group1 V4_ V4 not limiting x
5 x x Group1 V5_ V5 0.1 x
6 x x Group2 V1_ V1 0.65 x
7 x x Group2 V2_ V2 1 x
8 x x Group2 V3_ V3 1 x
9 x x Group2 V4_ V4 0.6 x
10 x x Group2 V5_ V5 0.25 x
11 x x Group3 V1_ V1 0.65 x
12 x x Group3 V2_ V2 0.75 x
13 x x Group3 V3_ V3 0.3 x
14 x x Group3 V4_ V4 1 x
15 x x Group3 V5_ V5 1 x