我目前正在考虑dplyr
中我似乎无法理解的特定行为。对于分组数据,do
允许对当前组进行.
操作,但在summarise
.
中指的是整个数据而不是每个组。为什么会这样?
library(dplyr)
df <- data.frame(
hour = factor(rep(1:24, each = 21)),
price = runif(504, min = -10, max = 125)
)
df %>% group_by(hour) %>%
summarise(mean(price))
# # A tibble: 24 x 2
# hour `mean(price)`
# <fctr> <dbl>
# 1 1 58.78788
# 2 2 55.51119
# 3 3 54.44470
# [...]
df %>% group_by(hour) %>%
summarise(mean(.$price))
# # A tibble: 24 x 2
# hour `mean(.$price)`
# <fctr> <dbl>
# 1 1 54.66447
# 2 2 54.66447
# 3 3 54.66447
# [...]
mean(df$price)
# [1] 54.66447
df %>% group_by(hour) %>%
do(as.data.frame(mean(.$price)))
# # A tibble: 24 x 2
# # Groups: hour [24]
# hour `mean(.$price)`
# <fctr> <dbl>
# 1 1 58.78788
# 2 2 55.51119
# 3 3 54.44470
# [...]
可以看出,只有summarise
没有.
而do
只有.
会产生预期的结果(即聚合在分组变量上)。 summarise
.
仅返回整体mean
。
我知道为什么问题对于SO来说可能不是最合适的问题,但是因为dplyr
应该是直观的,这对我来说似乎并不直观,我希望这没关系。