在R中基于Group、Variable/Variable_多条件合并DataFrame与列表
R语言:基于双条件(Variable/Variable_)合并嵌套列表与DataFrame
注意事项:原列表结构问题
你定义的List存在重复的GROUP1/Group2/Group3键,R语言中列表的重复键会被后面的子列表覆盖,导致丢失V1-V5的原始数据。首先需要修正列表结构,将每个Group下的V1-V5和V1_-V5_键值对放在同一个子列表中:
# 修正后的嵌套列表 List <- list( Group1 = list(V1 = 0.857138, V2 = 1, V3 = 0.5, V4 = "not limiting", V5 = 0.1, V1_ = "x", V2_ = "x", V3_ = "x", V4_ = "x", V5_ = "x"), Group2 = list(V1 = 0.65, V2 = 1, V3 = 1, V4 = 0.6, V5 = 0.25, V1_ = "x", V2_ = "x", V3_ = "x", V4_ = "x", V5_ = "x"), Group3 = list(V1 = 0.65, V2 = 0.75, V3 = 0.3, V4 = 1, V5 = 1, V1_ = "x", V2_ = "x", V3_ = "x", V4_ = "x", V5_ = "x") )
解决方案代码
使用tidyverse工具链,分别提取并整理Variable和Variable_对应的数据,再合并到原DataFrame:
library(tidyverse) # 提取并整理Variable对应的数据(不带下划线的变量) var_data <- List %>% unlist() %>% enframe(name = "key", value = "Variable_Value") %>% separate_wider_delim(cols = key, names = c("Group", "Variable"), delim = "\\.") %>% filter(!str_detect(Variable, "_")) # 提取并整理Variable_对应的数据(带下划线的变量) var_underscore_data <- List %>% unlist() %>% enframe(name = "key", value = "Variable__Value") %>% separate_wider_delim(cols = key, names = c("Group", "Variable_"), delim = "\\.") %>% filter(str_detect(Variable_, "_")) # 双条件合并到原DataFrame result <- data %>% left_join(var_data, by = c("Group", "Variable")) %>% left_join(var_underscore_data, by = c("Group", "Variable_"))
结果验证
执行print(result)可以看到原DataFrame新增了Variable_Value(对应Variable列的取值)和Variable__Value(对应Variable_列的取值)两列,所有匹配项均已正确填充。
内容的提问来源于stack exchange,提问作者confusedindividual
相关产品推荐
相关产品推荐

