2015-05-11 34 views
1

假設我們有一個data.frame「DF」:如何使用group_by(dplyr)訪問data.frame的所有元素?

speed dist lan 
     4 2 "bra" 
     4 10 "bra" 
     7 4 "bra" 
     7 22 "col" 
     8 16 "col" 
     9 10 "col" 
    10 18 "fin" 
      ... 

我要實現速度和DIST groupin_by LAN一些操作,例如,嘗試打印一些值。 我該怎麼做?

我已經試過這種方式,但我不能獲得成功:

df %>% 
    group_by(lan) %>% 
    (function(.) { 
     print(.$speed) 
     print(.$dist) 
    }) 
+0

是否要更改變量或進行彙總? –

+0

兩者都不是。我不想更改data.frame。我只想打印或執行其他功能... –

+2

您期望的輸出是什麼?請將此添加到問題中。 – jed

回答

1

你應該使用do如@ r2evans在上述意見建議。但通常返回原始的data.frame通常會更好,因此您可以繼續使用它。在你的情況,例如,你可能想要計算平均速度和平均DIST後:

df %>% 
    group_by(lan) %>% 
    do({ 
    cat("lan = ", .$lan[1], "\n") 
    print(.$speed) 
    print(.$dist) 
    . 
    }) %>% 
    summarise(mean(speed), mean(dist)) 

而就這樣我就可以顯示輸出,在這裏與mtcars一個例子。

mtcars %>% 
    group_by(cyl) %>% 
    do({cat("cyl = ", .$cyl[1], "\n") 
     print(.$mpg) 
     print(.$wt) 
     .}) %>% 
    summarise(mean(mpg), mean(wt)) 
## cyl = 4 
## [1] 22.8 24.4 22.8 32.4 30.4 33.9 21.5 27.3 26.0 30.4 21.4 
## [1] 2.320 3.190 3.150 2.200 1.615 1.835 2.465 1.935 2.140 1.513 2.780 
## cyl = 6 
## [1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7 
## [1] 2.620 2.875 3.215 3.460 3.440 3.440 2.770 
## cyl = 8 
## [1] 18.7 14.3 16.4 17.3 15.2 10.4 10.4 14.7 15.5 15.2 13.3 19.2 15.8 15.0 
## [1] 3.440 3.570 4.070 3.730 3.780 5.250 5.424 5.345 3.520 3.435 3.840 3.845 3.170 3.570 
## Source: local data frame [3 x 3] 
## 
## cyl mean(mpg) mean(wt) 
## 1 4 26.66364 2.285727 
## 2 6 19.74286 3.117143 
## 3 8 15.10000 3.999214