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

Grouping on two columns and counting distinct values using R

使用 R,我试图获得两个聚合函数 max 和 count distinct 以及数据框中存在的值,并根据其他两个列对它们进行分组。

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

对我做错了什么有什么建议吗?

你可能同时是 运行 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