我有一个带有变量/列的小标题,其中包括不同形状的小标题列表。我想为其中一个变量中的每个(子)标题添加一个变量/列。
例如此类数据
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")))
看起来像:
> aaa
# A tibble: 3 x 3
qq ww ee
<dbl> <list> <list>
1 1.00 <tibble [2 × 2]> <tibble [2 × 2]>
2 2.00 <tibble [1 × 2]> <tibble [2 × 2]>
3 3.00 <tibble [1 × 2]> <tibble [1 × 2]>
和
> aaa$ee
[[1]]
# A tibble: 2 x 2
a s
<dbl> <chr>
1 1.00 as
2 2.00 df
[[2]]
# A tibble: 2 x 2
a s
<dbl> <chr>
1 3.00 qz
2 6.00 wz
[[3]]
# A tibble: 1 x 2
a s
<dbl> <chr>
1 4.00 ez
假设我想在 aaa$ee
中的每个 tibble
中创建一个名为 lll
的新变量,它是每个的第一个字母该表中变量 s
中的字符串。
我可以通过 lapply
获得这些,例如:
lll <- lapply(X = aaa$ee,
FUN = function(z){substr(z$s, 1,1)})
导致
> lll
[[1]]
[1] "a" "d"
[[2]]
[1] "q" "w"
[[3]]
[1] "e"
但是如何将这个列表中的每个向量绑定(bind)为 aaa$ee
中每个 tibble
的列?
产生应该看起来像这样的结果
> aaa$ee
[[1]]
# A tibble: 2 x 2
a s
<dbl> <chr> <chr>
1 1.00 as a
2 2.00 df d
[[2]]
# A tibble: 2 x 2
a s
<dbl> <chr> <chr>
1 3.00 qz q
2 6.00 wz w
[[3]]
# A tibble: 1 x 2
a s
<dbl> <chr> <chr>
1 4.00 ez e
最佳答案
我们可以使用 map
和 mutate
遍历 'ee' 列来创建 'new' 列
library(purrr)
out <- aaa %>%
mutate(ee = map(ee, ~ .x %>%
mutate(new = substr(s, 1, 1))))
out$ee
#[[1]]
## A tibble: 2 x 3
# a s new
# <dbl> <chr> <chr>
#1 1 as a
#2 2 df d
#[[2]]
# A tibble: 2 x 3
# a s new
# <dbl> <chr> <chr>
#1 3 qz q
#2 6 wz w
#[[3]]
# A tibble: 1 x 3
# a s new
# <dbl> <chr> <chr>
#1 4 ez e
如果我们使用 lapply
方法(使用 base R
),然后使用 transform
创建一个新列并将其分配给 '嗯'
aaa$ee <- lapply(aaa$ee, transform, new = substr(s, 1, 1))
关于r - 修改/添加列到嵌套的tibble,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50126316/