如何为含不同结构子tibble列表的嵌套tibble添加新列?
给嵌套Tibble的子表添加新列
我来帮你搞定这个问题!你手头有个包含嵌套tibble的父表,想给其中某一列(比如ww)的每个子tibble都新增一列,其实用dplyr结合purrr的映射函数就能轻松实现,下面一步步来:
1. 先确认你的示例数据
首先先把你给出的示例数据放出来,方便后续操作:
library("tibble") aaa <- tibble(qq = c(1,2,3), ww = list(tibble(a = c(1,2), s = c("as", "df")), tibble(a = 3, s ="q"), tibble(a = 4, s = "e")), ee = list(tibble(a = c(1,2), s = c("as", "df")), tibble(a = c(3,6), s = c("qz", "wz")), tibble(a = 4, s = "ez")))
2. 给子tibble添加新列的两种常见场景
场景1:新列值对应父表的某一列(比如qq)
如果你希望子表的新列能和父表当前行的qq值对应,用map2函数同时遍历ww列表和qq列的元素,把qq的值传递给子表:
library("dplyr") library("purrr") # 给ww的每个子tibble新增new_col,值为对应父行的qq aaa_updated <- aaa %>% mutate(ww = map2(ww, qq, ~ .x %>% mutate(new_col = .y))) # 查看更新后的ww子表 aaa_updated$ww
运行后你会看到:
- 第一个子tibble的
new_col全是1,第二个全是2,第三个全是3,完美匹配父表的qq值。
场景2:新列是固定值
如果新列的值是统一的固定内容,用map函数直接遍历ww列表即可:
aaa_updated <- aaa %>% mutate(ww = map(ww, ~ .x %>% mutate(new_col = "这是固定值")))
为什么这个方法可行?
不管子tibble的行数多少(你的示例里有的子表1行,有的2行),map/map2都会自动适配每个子表的结构,确保新列能正确添加进去,不会因为子表结构不同报错。
内容的提问来源于stack exchange,提问作者Scransom
相关产品推荐
相关产品推荐

