Группировка по двум столбцам и подсчет различных значений с использованием R - PullRequest
0 голосов
/ 30 ноября 2018

Используя R, я пытаюсь получить две агрегатные функции max и count отдельно и для значений, присутствующих во фрейме данных, и сгруппировать их на основе двух других столбцов.

A = c('A', 'A', 'A', 'B', 'B', 'B')
B = c('R1', 'R2', 'R1', 'R1', 'R2', 'R1')
C = c(11, 2, 8, 11, 11, 17)
d = data.frame (A, B, C)

sqldf('select A, B, count(distinct(C)) as UNIQUE_COUNT from d group by A, B')

Правильный вывод

  A  B UNIQUE_COUNT
1 A R1            2
2 A R2            1
3 B R1            2
4 B R2            1

Я могу сделать это, используя обычный sql, используя пакет sqldf в R. Я пытался сделать то же самое, используя native R, чтобы избежать sql.Я попытался выполнить следующий запрос, приведенный ниже, но он дал неправильный вывод.

Неверный запрос

d %>%
group_by(A,B)%>%
summarise(UNIQUE_COUNT = n_distinct(C))

Неверный вывод

  UNIQUE_COUNT
1                4

Любое предложение о том, что я делаю неправильно

1 Ответ

0 голосов
/ 30 ноября 2018

вы, вероятно, одновременно используете plyr -package и dplyr -package.Они оба содержат функцию с именем summarise.Если не plyr, то, вероятно, другой пакет, содержащий функцию с именем summarise.Запустите ?summarise, чтобы проверить доступные summarise -функции в вашей системе.

Убедитесь, что вы используете summarise() из пакета dplyr !!

library( dplyr )
d %>%
  dplyr::group_by(A,B)%>%
  dplyr::summarise(UNIQUE_COUNT = n_distinct(C)) # <-- dplyr

# # A tibble: 4 x 3
# # Groups:   A [?]
#   A     B     UNIQUE_COUNT
#   <fct> <fct>        <int>
# 1 A     R1               2
# 2 A     R2               1
# 3 B     R1               2
# 4 B     R2               1

d %>%
  dplyr::group_by(A,B)%>%
  plyr::summarise(UNIQUE_COUNT = n_distinct(C))  # <-- plyr

#    UNIQUE_COUNT
# 1            4
...