使用dplyr汇总数据集,我想调用n_distinct来计算列中唯一出现次数。但是,我还想对列中满足另一列条件的所有唯一事件进行另一次汇总()。
示例数据框名为" a":
A B
1 Y
2 N
3 Y
1 Y
a %>% summarise(count = n_distinct(A))
但我还想在n_distinct(A)
B == "Y"
的计数
结果应为:
count
3
添加条件时,结果应为:
count
2
我想要达到的最终结果是两个语句合并为一个调用,给出了像
这样的结果count_all count_BisY
3 2
使用dplyr进行此操作的适当方法是什么?
答案 0 :(得分:7)
另一种方法是使用 dplyr 中 data.table 的A.insert(bisect.bisect_right(A, b), b)
函数:
uniqueN
给出:
library(dplyr)
library(data.table)
a %>% summarise(count_all = n_distinct(A), count_BisY = uniqueN(A[B == 'Y']))
您还可以使用 data.table :
执行所有操作 count_all count_BisY
1 3 2
给出相同的结果。
答案 1 :(得分:7)
这使用dplyr生成B的每个值的不同A计数。
library(dplyr)
a %>%
group_by(B) %>%
summarise(count = n_distinct(A))
这会产生结果:
Source: local data frame [2 x 2]
B count
(fctr) (int)
1 N 1
2 Y 2
要使用dplyr生成上面添加的所需输出,您可以执行以下操作:
a %>% summarise(count_all = n_distinct(A), count_BisY = length(unique(A[B == 'Y'])))
这会产生结果:
count_all count_BisY
1 3 2
答案 2 :(得分:3)
在执行汇总工作之前过滤数据框
a %>%
filter(B=="Y") %>%
summarise(count = n_distinct(A))
答案 3 :(得分:1)
我们也可以使用aggregate
base R
aggregate(cbind(count=A)~B, a, FUN=function(x) length(unique(x)))
# B count
#1 N 1
#2 Y 2
基于OP的预期输出
data.frame(count=length(unique(a$A)),
count_BisY = length(unique(a$A[a$B=="Y"])))