Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么dplyr::do()允许。是否引用当前组,但dplyr::summary()不引用?_R_Dplyr - Fatal编程技术网

为什么dplyr::do()允许。是否引用当前组,但dplyr::summary()不引用?

为什么dplyr::do()允许。是否引用当前组,但dplyr::summary()不引用?,r,dplyr,R,Dplyr,我目前对dplyr中的一个我似乎无法理解的特定行为感到挠头。对于分组数据,do允许对当前组执行操作,但在摘要中,指的是整个数据,而不是每个组。为什么会这样 library(dplyr) df <- data.frame( hour = factor(rep(1:24, each = 21)), price = runif(504, min = -10, max = 125) ) df %>% group_by(hour) %>% summaris

我目前对
dplyr
中的一个我似乎无法理解的特定行为感到挠头。对于分组数据,
do
允许对当前组执行
操作,但在
摘要中,
指的是整个数据,而不是每个组。为什么会这样

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
# [...]
库(dplyr)
df%分组单位(小时)%>%
总结(平均值(价格))
##tibble:24 x 2
#小时平均值(价格)`
#            
# 1      1      58.78788
# 2      2      55.51119
# 3      3      54.44470
# [...]
df%%>%分组单位(小时)%%>%
总结(平均值(.$价格))
##tibble:24 x 2
#小时平均值(.$价格)`
#               
#  1      1        54.66447
#  2      2        54.66447
#  3      3        54.66447
# [...]
平均值(df$价格)
# [1] 54.66447
df%%>%分组单位(小时)%%>%
do(如.data.frame(平均(.$price)))
##tibble:24 x 2
##小组:小时[24]
#小时平均值(.$价格)`
#               
#  1      1        58.78788
#  2      2        55.51119
#  3      3        54.44470
# [...]
可以看出,只有
总结
而不使用
do
而使用
才能产生预期的结果(即对分组变量进行聚合)<代码>摘要
只返回总体
平均值


我知道为什么问题可能不是最适合这样做的问题,但由于
dplyr
应该是直观的,而这对我来说似乎一点也不直观,我希望这是可以的。

因为您通过提取
$price
得到整个专栏的
平均值。这就像做
mean(df$price)
do
这样做和
summary
不这样做的原因应该与源代码相关。在
摘要中,默认选项是仅在分组后指定列名。因此,如果您想将该列提取为
$price
,它将对整个列执行此操作(在某些情况下可能很有用)。在
do
中,如果我们想这样做,您可以称为
mean(df$price)
而不是
df$price
,因为
summary
do
中都可以使用
。这里的语法以这种微妙的方式不同,有什么具体原因吗?