在R语言中如何将列表与DataFrame按名称关联合并?
按名称将列表与DataFrame关联合并的方法
这里有几种简洁的实现方式,都能满足你的需求:
方法一:Base R 极简实现
直接利用match函数匹配名称位置,提取列表对应值:
df$value_l <- unlist(l)[match(df$group, names(l))]
运行后df会直接新增value_l列,匹配不到的自动填充NA。
方法二:Base R 数据框合并法
先把列表转换为带名称的DataFrame,再通过左连接合并:
# 将列表转为结构化数据框 list_df <- data.frame( group = names(l), value_l = unlist(l), stringsAsFactors = FALSE ) # 左连接保留原DataFrame的所有行 result_df <- merge(df, list_df, by = "group", all.x = TRUE)
方法三:tidyverse 风格实现
如果习惯使用dplyr和purrr工具链,可以这样写:
library(dplyr) library(purrr) result_df <- df %>% mutate(value_l = map_dbl(group, ~ l[[.x]] %||% NA_real_))
或者先转列表为tibble再做左连接:
library(dplyr) list_tbl <- tibble( group = names(l), value_l = unlist(l) ) result_df <- df %>% left_join(list_tbl, by = "group")
以上方法最终都会生成你预期的输出:
group value value_l 1 A 1 999 2 B 2 55 3 C 3 NA
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

