R语言将嵌套列表作为新列添加至数据框列表的方法
实现方案
两个列表按位置一一对应、子元素长度匹配的前提下,直接按配对遍历的方式新增列即可,处理后完全保留原有列表结构,不需要改动其他内容。
Base R 实现(无需安装额外包)
用内置的Map函数做配对遍历,对应位置的数据框和数值向量直接做列赋值即可:
result <- Map( function(current_df, add_values) { # 新增列名设为value,传入对应位置的t子列表内容 current_df$value <- add_values # 如果不需要保留原向量的X171这类元素名,改用下一行代码 # current_df$value <- unname(add_values) current_df }, t_b_name, t )
运行后得到的result就是和原t_b_name结构完全一致的列表,每个数据框都新增了value列。可以运行以下代码验证效果:
# 查看第一个数据框的完整内容,确认新增列 print(result[[1]])
tidyverse 实现(习惯用dplyr语法可选)
如果平时用tidyverse生态的函数,用purrr::map2实现逻辑完全相同:
library(purrr) library(dplyr) result <- map2( t_b_name, t, ~ .x |> mutate(value = .y) )
注意事项
- 以上代码默认
t中每个子向量的长度,和t_b_name对应位置数据框的行数完全相等,你提供的示例数据满足该条件(每个数据框5行,每个t子向量刚好5个值),如果长度不匹配会报赋值长度错误。 - 如果需要覆盖原
t_b_name对象,直接把运行结果赋值给t_b_name即可,不需要新建result变量。
内容的提问来源于stack exchange,提问作者statwoman
相关产品推荐
相关产品推荐

