如何使用dplyr

问题描述:

算上嵌套data_frames行下面是一个愚蠢的例子数据帧:如何使用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" 

怎么回事?

+1

试试这个:'df $ nRow Gopala

结合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 

我喜欢这种方法,因为你呆的日常工作流程中,创造发生变异中的一个新列,但借力map_* - 家庭,因为你需要操作在一张名单上。

随着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 
+1

与上面提到的'apply'家族相比,'dplyr'解决方案中的非常好的解决方案。我非常喜欢这个。 – Gopala