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

crf*_*crf 4 r split-apply-combine dplyr

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

\n\n
df <- data_frame(A = c(rep(1, 5), rep(2, 4)), B = 1:9) %>% \n  group_by(A) %>% \n  nest()\n
Run Code Online (Sandbox Code Playgroud)\n\n

看起来像这样:

\n\n
> df\n# A tibble: 2 \xc3\x97 2\n      A             data\n  <dbl>           <list>\n1     1 <tibble [5 \xc3\x97 1]>\n2     2 <tibble [4 \xc3\x97 1]>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想添加第三列,其N条目等于每个嵌套 data_frame 中的行数data。我想这会起作用:

\n\n
> df %>% \n+   mutate(N = nrow(data))\nError: Unsupported type NILSXP for column "N"\n
Run Code Online (Sandbox Code Playgroud)\n\n

出了什么问题?

\n

Tho*_*s K 5

结合起来dplyrpurrr可以这样做:

\n\n\n\n
library(tidyverse)\n\ndf %>% \n  mutate(n = map_dbl(data, nrow))\n#> # A tibble: 2 \xc3\x97 3\n#>       A             data     n\n#>   <dbl>           <list> <dbl>\n#> 1     1 <tibble [5 \xc3\x97 1]>     5\n#> 2     2 <tibble [4 \xc3\x97 1]>     4\n
Run Code Online (Sandbox Code Playgroud)\n\n

我喜欢这种方法,因为您保持在通常的工作流程中,在 mutate 中创建一个新列,但利用 -family map_*,因为您需要对列表进行操作。

\n