【发布时间】:2018-02-03 15:05:24
【问题描述】:
我注意到,在向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’
请注意汇总列如何根据分组列的分组和位置而变化。
在其他平台上也一样吗?是错误还是功能?
【问题讨论】:
-
似乎是有意的,因为
summarise_at调用tbl_nongroup_vars,它在不分组变量的情况下获取小标题。然后将mean应用于该集合。 -
@lukeA,感谢您查看!我不得不说,如果我必须确定索引并减去它们之前的分组列数,这对我来说感觉非常违反直觉。
-
与其使用
3:4,不如使用vars(disp:hp)更安全。例如:mtcars %>% group_by(cyl) %>% summarise_at(vars(disp:hp), mean) -
@MrFlick,是的,我同意,而且我几乎从未使用过索引选项。但既然它在那里,当我发现它时我很惊讶
-
仍有可能使用索引
mtcars %>% group_by(cyl) %>% summarise_at(.vars = colnames(.)[3:4] , mean)。无论如何,@docendodiscimus 感谢您指出这一点,因为即使此功能是故意的,文档也没有明确解释这一点,在我的情况下可能是错误的来源。