在两列上分组并使用R计算不同的值

时间:2018-11-30 07:46:56

标签: sql r group-by count distinct

使用R,我试图获得两个合计函数max,并对其进行计数,并针对数据帧中存在的值,并基于其他两列对它们进行分组。

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

我能够使用R中的sqldf包使用普通的sql来做到这一点。我试图使用本机R来避免sql来做到这一点。我尝试了下面给出的以下查询,但是给出了错误的输出。

错误的查询

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

错误的输出

  UNIQUE_COUNT
1                4

关于我在做什么错的任何建议?

1 个答案:

答案 0 :(得分:2)

您可能同时运行plyr-package和dplyr-package。它们都包含一个名为summarise的函数。如果不是plyr,则可能是另一个包含名为summarise的函数的软件包。 运行?summarise,检查系统上可用的summarise功能。

确保您使用的是dplyr软件包中的summarise()

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