首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用带有列索引的dplyr summarise_at

使用带有列索引的dplyr summarise_at
EN

Stack Overflow用户
提问于 2017-08-25 14:21:04
回答 2查看 8.5K关注 0票数 24

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

下面是一个例子:

代码语言:javascript
运行
复制
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’

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

在其他平台上也是这样吗?它是一个bug还是一个特性?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-24 11:49:10

使用版本0.7.5,不能再复制此行为:

代码语言:javascript
运行
复制
  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. 
票数 4
EN

Stack Overflow用户

发布于 2017-11-26 16:40:31

谢谢您指出这一点,因为即使这个特性是有意的,文档也没有明确地解释这一点,在我的例子中,可能是错误的来源。实际上,这个问题在other question上回答之前就已经解决了,我上面的评论用同样的逻辑正确地解决了这个问题。

此时,可能的解决方案是提供名称而不是索引。但是,只需添加少量符号.vars = names(.)[3:4],就可以使用索引,如下所示:

代码语言:javascript
运行
复制
mtcars %>% 
  group_by(cyl) %>% 
  summarise_at( .vars = colnames(.)[3:4] , mean)

mtcars %>% 
  group_by(cyl) %>% 
  summarise_at( .vars = names(.)[3:4] , mean)


## A tibble: 3 x 3
#    cyl     disp        hp
#  <dbl>    <dbl>     <dbl>
#1     4 105.1364  82.63636
#2     6 183.3143 122.28571
#3     8 353.1000 209.21429
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45883513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档