使用dplyr汇总数据集,我想调用n_distinct来计算列中唯一出现次数.但是,我还想对列中满足另一列条件的所有唯一事件进行另一次汇总().
名为"a"的示例数据帧:
A B
1 Y
2 N
3 Y
1 Y
Run Code Online (Sandbox Code Playgroud)
a %>% summarise(count = n_distinct(A))
不过,我也想添加的数量n_distinct(A),其中B == "Y"
结果应该是:
count
3
Run Code Online (Sandbox Code Playgroud)
添加条件时,结果应为:
count
2
Run Code Online (Sandbox Code Playgroud)
我试图实现的最终结果是两个语句合并为一个调用,给我一个结果
count_all count_BisY
3 2
Run Code Online (Sandbox Code Playgroud)
使用dplyr进行此操作的适当方法是什么?
另一种方法是使用dplyr中的data.tableuniqueN函数:
library(dplyr)
library(data.table)
a %>% summarise(count_all = n_distinct(A), count_BisY = uniqueN(A[B == 'Y']))
Run Code Online (Sandbox Code Playgroud)
这使:
count_all count_BisY
1 3 2
Run Code Online (Sandbox Code Playgroud)
您还可以使用data.table执行所有操作:
library(data.table)
setDT(a)[, .(count_all = uniqueN(A), count_BisY = uniqueN(A[B == 'Y']))]
Run Code Online (Sandbox Code Playgroud)
这给出了相同的结果.
这使用dplyr通过B的每个值产生不同的A计数.
library(dplyr)
a %>%
group_by(B) %>%
summarise(count = n_distinct(A))
Run Code Online (Sandbox Code Playgroud)
这会产生结果:
Source: local data frame [2 x 2]
B count
(fctr) (int)
1 N 1
2 Y 2
Run Code Online (Sandbox Code Playgroud)
要使用dplyr生成上面添加的所需输出,您可以执行以下操作:
a %>% summarise(count_all = n_distinct(A), count_BisY = length(unique(A[B == 'Y'])))
Run Code Online (Sandbox Code Playgroud)
这会产生结果:
count_all count_BisY
1 3 2
Run Code Online (Sandbox Code Playgroud)