2017-05-04 55 views
3

算上嵌套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 < - sapply(df $ data,nrow)'代替。您一次需要完成一個單元。不能對整列數據幀執行「nrow」操作。 – Gopala

回答

1

結合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_* - 家庭,因爲你需要操作在一張名單上。

0

隨着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 
1

你可以這樣做:

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