如何在 tidyverse 中将列嵌套到自身中
how to nest a column into itself in tidyverse
library(tidyverse)
为什么这会产生一个列表列 'am':
mtcars %>%
group_by(cyl) %>%
mutate(am=list(mtcars[,'am']))
但不是:
mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(am=list(mtcars[,'am']))
错误:与 STRSXP 不兼容
我意识到这是一个人为的例子,但它与我正在从事的工作相关。 mutate 的作用域不在其环境之外吗?
mtcars %>% group_by(cyl) %>% nest()
## # A tibble: 3 × 2
## cyl data
## <dbl> <list>
## 1 6 <tibble [7 × 10]>
## 2 4 <tibble [11 × 10]>
## 3 8 <tibble [14 × 10]>
具有三行,因此您需要的任何列也必须具有三个元素。
如果您想要每一行的完整 am
列,您可以按行进行变异,这将分别评估每一行的 mutate
调用,
mtcars %>% group_by(cyl) %>% nest() %>% rowwise() %>% mutate(am = list(mtcars$am))
## Source: local data frame [3 x 3]
## Groups: <by row>
##
## # A tibble: 3 × 3
## cyl data am
## <dbl> <list> <list>
## 1 6 <tibble [7 × 10]> <dbl [32]>
## 2 4 <tibble [11 × 10]> <dbl [32]>
## 3 8 <tibble [14 × 10]> <dbl [32]>
或没有rowwise
,只需为每一行重复所需的列表:
mtcars %>% group_by(cyl) %>% nest() %>% mutate(am = rep(list(mtcars$am), n()))
## # A tibble: 3 × 3
## cyl data am
## <dbl> <list> <list>
## 1 6 <tibble [7 × 10]> <dbl [32]>
## 2 4 <tibble [11 × 10]> <dbl [32]>
## 3 8 <tibble [14 × 10]> <dbl [32]>
library(tidyverse)
为什么这会产生一个列表列 'am':
mtcars %>%
group_by(cyl) %>%
mutate(am=list(mtcars[,'am']))
但不是:
mtcars %>%
group_by(cyl) %>%
nest() %>%
mutate(am=list(mtcars[,'am']))
错误:与 STRSXP 不兼容
我意识到这是一个人为的例子,但它与我正在从事的工作相关。 mutate 的作用域不在其环境之外吗?
mtcars %>% group_by(cyl) %>% nest()
## # A tibble: 3 × 2
## cyl data
## <dbl> <list>
## 1 6 <tibble [7 × 10]>
## 2 4 <tibble [11 × 10]>
## 3 8 <tibble [14 × 10]>
具有三行,因此您需要的任何列也必须具有三个元素。
如果您想要每一行的完整 am
列,您可以按行进行变异,这将分别评估每一行的 mutate
调用,
mtcars %>% group_by(cyl) %>% nest() %>% rowwise() %>% mutate(am = list(mtcars$am))
## Source: local data frame [3 x 3]
## Groups: <by row>
##
## # A tibble: 3 × 3
## cyl data am
## <dbl> <list> <list>
## 1 6 <tibble [7 × 10]> <dbl [32]>
## 2 4 <tibble [11 × 10]> <dbl [32]>
## 3 8 <tibble [14 × 10]> <dbl [32]>
或没有rowwise
,只需为每一行重复所需的列表:
mtcars %>% group_by(cyl) %>% nest() %>% mutate(am = rep(list(mtcars$am), n()))
## # A tibble: 3 × 3
## cyl data am
## <dbl> <list> <list>
## 1 6 <tibble [7 × 10]> <dbl [32]>
## 2 4 <tibble [11 × 10]> <dbl [32]>
## 3 8 <tibble [14 × 10]> <dbl [32]>