Modify/Add 列到嵌套小标题
Modify/Add column to nested tibble
我有一个带有 variables/columns 的小标题,其中包含不同形状的小标题列表。我想为其中一个变量中的每个(子)tibble 添加一个 variable/column。
例如这样的数据
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
中每个字符串的第一个字母table.
我可以用 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"
但是如何将此列表中的每个向量绑定为 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
创建一个新列并将其分配给'ee'
aaa$ee <- lapply(aaa$ee, transform, new = substr(s, 1, 1))
我有一个带有 variables/columns 的小标题,其中包含不同形状的小标题列表。我想为其中一个变量中的每个(子)tibble 添加一个 variable/column。
例如这样的数据
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
中每个字符串的第一个字母table.
我可以用 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"
但是如何将此列表中的每个向量绑定为 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
创建一个新列并将其分配给'ee'
aaa$ee <- lapply(aaa$ee, transform, new = substr(s, 1, 1))