Почему !!! в списке строк не работает, как задумано в dplyr - PullRequest
1 голос
/ 03 октября 2019

пытаюсь использовать !!! оператор tidyr.

Следующий код не работает:

library(tidyr)
library(dplyr)

a = data.frame(x=c(1,1,2,3),y=c(11,11,22,33),z=c(111,111,111,222))

cols = c('x','z')
a %>% group_by(!!!cols) %>% summarize(count=n())

Я хотел, чтобы вывод был таким же, как следующий:

a %>% group_by(x,z) %>% summarize(count=n())
# # A tibble: 3 x 3
# # Groups:   x [3]
#       x     z count
#   <dbl> <dbl> <int>
# 1     1   111     2
# 2     2   111     1
# 3     3   222     1

1 Ответ

1 голос
/ 03 октября 2019

Мы можем использовать syms для преобразования строки в символ, затем выполнить оценку (!!!) и summarise

library(dplyr)
a %>% 
  group_by(!!! rlang::syms(cols)) %>%
  summarize(count=n())
# A tibble: 3 x 3
# Groups:   x [3]
#      x     z count
#  <dbl> <dbl> <int>
#1     1   111     2
#2     2   111     1
#3     3   222     1

Вместо того, чтобы делать это с group_by/summarise, можно также выполнитьcount

a %>%
   count(!!! rlang::syms(cols))
# A tibble: 3 x 3
#      x     z     n
#  <dbl> <dbl> <int>
#1     1   111     2
#2     2   111     1
#3     3   222     1

Или используйте group_by_at

a %>%
  group_by_at(cols) %>%
  summarize(count=n())
...