tag - Usando dplyr resumise_at con índice de columna
meta alt tag (2)
Noté que cuando se suministran índices de columna a dplyr::summarize_at
la columna que se va a resumir se determina excluyendo la (s) columna (s) de agrupación. Me pregunto si es así como se supone que debe ser, ya que con este diseño, el uso del índice de columna correcto depende de si las columnas de resumen están posicionadas antes o después de las columnas de agrupación.
Aquí hay un ejemplo:
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’
Observe cómo cambian las columnas resumidas según la agrupación y la posición de la columna de agrupación.
¿Es lo mismo en otras plataformas? ¿Es un error o una característica?
@docendodiscimus, gracias por señalarlo, porque incluso si esta característica fuera intencional, la documentación no lo explica explícitamente y, en mi caso, podría ser una fuente de errores . En realidad, este problema se resolvió antes de responder a la otra pregunta , y mi comentario anterior lo hace correctamente con la misma lógica.
En este momento, la posible solución es proporcionar nombres en lugar de índices. Pero uno todavía puede hacerlo usando índices simplemente agregando algunos símbolos .vars = names(.)[3:4]
, como a continuación:
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
con la versión 0.7.5
ya no se puede reproducir este comportamiento:
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.