这是一个愚蠢的示例数据框:
df <- data_frame(A = c(rep(1, 5), rep(2, 4)), B = 1:9) %>%
group_by(A) %>%
nest()
看起来像这样:
> df
# A tibble: 2 × 2
A data
<dbl> <list>
1 1 <tibble [5 × 1]>
2 2 <tibble [4 × 1]>
我想添加一个名为N
的第三列,其条目等于data
中每个嵌套data_frame中的行数。我认为这样可行:
> df %>%
+ mutate(N = nrow(data))
Error: Unsupported type NILSXP for column "N"
出了什么问题?
答案 0 :(得分:4)
结合dplyr
和purrr
你可以做到:
library(tidyverse)
df %>%
mutate(n = map_dbl(data, nrow))
#> # A tibble: 2 × 3
#> A data n
#> <dbl> <list> <dbl>
#> 1 1 <tibble [5 × 1]> 5
#> 2 2 <tibble [4 × 1]> 4
我喜欢这种方法,因为你保持在通常的工作流程中,在mutate中创建一个新列,但利用map_*
- 系列,因为你需要在列表上操作。
答案 1 :(得分:2)
你可以这样做:
df %>%
rowwise() %>%
mutate(N = nrow(data))
给出了:
#Source: local data frame [2 x 3]
#Groups: <by row>
#
## A tibble: 2 × 3
# A data N
# <dbl> <list> <int>
#1 1 <tibble [5 × 1]> 5
#2 2 <tibble [4 × 1]> 4
答案 2 :(得分:1)
使用dplyr
:
df %>%
group_by(A) %>%
mutate(N = nrow(data.frame(data)))
A data N <dbl> <list> <int> 1 1 <tibble [5 × 1]> 5 2 2 <tibble [4 × 1]> 4