![](/img/trans.png)
[英]How do I pass a column name to a model formula in R using dplyr::summarise_at()
[英]Using dplyr summarise_at with column index
我注意到,當向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.
@docendodiscimus感謝您指出這一點,因為即使此功能是故意的,文檔也沒有明確解釋這一點,在我的情況下可能是錯誤的來源 。 實際上,在回答另一個問題之前,這個問題已經解決了,我上面的評論用相同的邏輯正確地做了。
此時,可能的解決方案是提供名稱而不是索引。 但是仍然可以通過添加幾個符號.vars = names(.)[3:4]
來使用索引,如下所示:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.