如何使用 group_by (dplyr) 访问 data.frame 的所有元素?

How do I access all the elements of a data.frame using group_by (dplyr)?

假设我们有一个 data.frame 'df':

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

我想实现对speed和dist的一些操作groupin_by lan,例如,尝试打印一些值。 我该怎么做?

我尝试过这种方式,但我无法取得成功:

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

您应该按照@r2evans 在上面评论中的建议使用do。但通常只 return 原来的 data.frame 会更好,这样您就可以继续使用它。例如,在您的情况下,您可能想要计算平均速度和平均距离:

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