根据列表中项目的名称多次合并数据框和列表

问题描述 投票:0回答:1

我希望将 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"))
r merge
1个回答
0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.