如何在R语言data frame中将单列值追加至对应行的列表列?
解决列表列追加对应行数值的问题
你遇到的问题根源在于:当你用map(lst, ~ append(., new_data))时,new_data是整个列的向量(也就是c(1,2,3)),所以每一次append操作都会把整个new_data的所有值都加到列表里,导致每个列表变成了原来的3个元素加上3个新元素,总共6个。
要实现只追加对应行的单个数值,你需要同时并行遍历lst列和new_data列的对应元素,这里用purrr的map2()函数就可以完美解决:
library(tidyverse) library(purrr) df <- tibble(abc = letters[1:3], lst = list(1:3, 1:3, 1:3), new_data=1:3) # 正确的代码 df %>% mutate(lst = map2(lst, new_data, ~ append(.x, .y)))
运行后得到的结果正是你想要的:
# A tibble: 3 x 3 abc lst new_data <chr> <list> <int> 1 a <int [4]> 1 2 b <int [4]> 2 3 c <int [4]> 3
查看每个列表的具体内容:
- 第一行的
lst是1,2,3,1 - 第二行的
lst是1,2,3,2 - 第三行的
lst是1,2,3,3
额外说明
map2()的作用是同时遍历两个长度相同的向量/列,.x对应第一个参数(这里是lst的每个列表元素),.y对应第二个参数(这里是new_data的每个数值),这样就能保证每一行的操作都是基于当前行的两个值。
如果你以后需要处理更多列的并行遍历,也可以用pmap(),写法如下:
df %>% mutate(lst = pmap(list(lst, new_data), ~ append(..1, ..2)))
内容的提问来源于stack exchange,提问作者Alper Yilmaz
相关产品推荐
相关产品推荐

