我注意到,当将列索引提供给dplyr::summarize_at时,确定了要汇总的列,但不包括分组列。我不知道这是应该的吗,因为通过这种设计,使用正确的列索引取决于汇总列是位于分组列之前还是之后。

这是一个例子:

library(dplyr)
data("mtcars")

# grouping column after summarise columns
mtcars %>% group_by(gear) %>% summarise_at(3:4, mean)
## A tibble: 3 x 3
#   gear     disp       hp
#  <dbl>    <dbl>    <dbl>
#1     3 326.3000 176.1333
#2     4 123.0167  89.5000
#3     5 202.4800 195.6000

# grouping columns before summarise columns
mtcars %>% group_by(cyl) %>% summarise_at(3:4, mean)
## A tibble: 3 x 3
#    cyl        hp     drat
#  <dbl>     <dbl>    <dbl>
#1     4  82.63636 4.070909
#2     6 122.28571 3.585714
#3     8 209.21429 3.229286

# no grouping columns
mtcars %>% summarise_at(3:4, mean)
#      disp       hp
#1 230.7219 146.6875

# actual third & fourth columns
names(mtcars)[3:4]
#[1] "disp" "hp"

packageVersion("dplyr")
#[1] ‘0.7.2’

请注意,汇总列如何根据分组列的分组和位置而变化。

在其他平台上也一样吗?它是错误还是功能?

最佳答案

对于0.7.5版本,此行为不再能够重现:

  library(dplyr)
  mtcars %>% group_by(gear) %>% summarise_at(3:4, mean)
  # # A tibble: 3 x 3
  #    gear  disp    hp
  #   <dbl> <dbl> <dbl>
  # 1     3  326. 176.
  # 2     4  123.  89.5
  # 3     5  202. 196.

  mtcars %>% group_by(cyl) %>% summarise_at(3:4, mean)
  # # A tibble: 3 x 3
  #     cyl  disp    hp
  #   <dbl> <dbl> <dbl>
  # 1     4  105.  82.6
  # 2     6  183. 122.
  # 3     8  353. 209.

08-25 06:15