/ / Pourquoi group_by et group_by_ donnent des réponses différentes lors de la synthèse par deux variables? - r, dplyr

Pourquoi group_by et group_by_ donnent-ils des réponses différentes en résumant par deux variables? - r, dplyr

Dans l'exemple suivant, je souhaite créer une statistique récapitulative à deux variables. Quand je le fais avec dplyr::group_by, Je reçois la bonne réponse, quand je le fais avec dplyr::group_by_, il résume un niveau de plus que je ne le souhaite.

library(dplyr)
set.seed(919)
df <- data.frame(
a = c(1, 1, 1, 2, 2, 2),
b = c(3, 3, 4, 4, 5, 5),
x = runif(6)
)

# Gives correct answer
df %>%
group_by(a, b) %>%
summarize(total = sum(x))

# Source: local data frame [4 x 3]
# Groups: a [?]
#
#       a     b     total
#   <dbl> <dbl>     <dbl>
# 1     1     3 1.5214746
# 2     1     4 0.7150204
# 3     2     4 0.1234555
# 4     2     5 0.8208454

# Wrong answer -- too many levels summarized
df %>%
group_by_(c("a", "b")) %>%
summarize(total = sum(x))
# # A tibble: 2 × 2
#       a     total
#   <dbl>     <dbl>
# 1     1 2.2364950
# 2     2 0.9443009

Que se passe-t-il?

Réponses:

4 pour la réponse № 1

Si vous souhaitez utiliser un vecteur de noms de variables, vous pouvez le transmettre à .dots paramètre en tant que:

df %>%
group_by_(.dots = c("a", "b")) %>%
summarize(total = sum(x))

#Source: local data frame [4 x 3]
#Groups: a [?]

#      a     b     total
#  <dbl> <dbl>     <dbl>
#1     1     3 1.5214746
#2     1     4 0.7150204
#3     2     4 0.1234555
#4     2     5 0.8208454

Ou vous pouvez l'utiliser de la même manière que vous le feriez avec NSE:

df %>%
group_by_("a", "b") %>%
summarize(total = sum(x))

#Source: local data frame [4 x 3]
#Groups: a [?]

#      a     b     total
#  <dbl> <dbl>     <dbl>
#1     1     3 1.5214746
#2     1     4 0.7150204
#3     2     4 0.1234555
#4     2     5 0.8208454