如何使用 dplyr 计算嵌套 data_frames 中的行数

How to count rows in nested data_frames with dplyr

这是一个愚蠢的示例数据框:

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"

怎么了?

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

你可以这样做:

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

结合 dplyrpurrr 你可以做:

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_* 系列,因为您需要对列表进行操作。