dplyr n_与条件不同
使用dplyr总结数据集,我想调用n_distinct来计算列中唯一出现的次数。但是,我还想对满足另一列条件的列中的所有唯一事件执行另一个summary() 名为“a”的数据帧示例:dplyr n_与条件不同,r,dplyr,R,Dplyr,使用dplyr总结数据集,我想调用n_distinct来计算列中唯一出现的次数。但是,我还想对满足另一列条件的列中的所有唯一事件执行另一个summary() 名为“a”的数据帧示例: a%>%摘要(计数=n_不同(a)) 但是,我还想添加一个计数n_distinct(a)其中B==“Y” 结果应该是: count 3 count 2 添加条件时,结果应为: count 3 count 2 我试图实现的最终结果是将两个语句合并到一个调用中,从而得到如下结果
a%>%摘要(计数=n_不同(a))
但是,我还想添加一个计数n_distinct(a)
其中B==“Y”
结果应该是:
count
3
count
2
添加条件时,结果应为:
count
3
count
2
我试图实现的最终结果是将两个语句合并到一个调用中,从而得到如下结果
count_all count_BisY
3 2
使用dplyr进行此操作的适当方式是什么?在执行总结工作之前过滤数据帧
a %>%
filter(B=="Y") %>%
summarise(count = n_distinct(A))
另一种方法是使用dplyr中data.table的
uniqueN
函数:
其中:
count_all count_BisY
1 3 2
您还可以使用data.table执行所有操作:
这会给出相同的结果。这会使用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
count_all count_BisY
1 3 2
要使用dplyr生成上面添加的所需输出,可以执行以下操作:
a %>% summarise(count_all = n_distinct(A), count_BisY = length(unique(A[B == 'Y'])))
这将产生以下结果:
Source: local data frame [2 x 2]
B count
(fctr) (int)
1 N 1
2 Y 2
count_all count_BisY
1 3 2
我们还可以使用
基本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"])))
您可以尝试使用:a%>%摘要(count=n_distinct(a[B='Y'])?@user3949008错误:n_distinct()的输入必须是数据集中的单个变量名orry,这可以使用n_distinct(df$a[df$B='Y'])。我仍然得到相同的错误:S
a%>%总结(count=n_distinct(a$a[a$B=='Y']))
在我看来@Gopala提出的答案是正确的。特别是data.frame(A=c(1:3,1),B=c('Y','N','Y','Y'))%%总结(count=N_distinct(A[B='Y']),count_all=N_distinct(A))
对我有效(使用dplyr 0.7.6)。我明白,抱歉不清楚,我的最终目标是得到一个结果,其中显示了总计的计数,以及一个表中B==“Y”的计数。我可以分别做每件事,然后把它们联系在一起,我想你能用(B)代替filter()吗?这就是你想要的吗?是的,实际上我认为这是可行的,它只是添加了一个额外的列和额外的行,我可以把它合并成一个列,表示B=='Y'
的数量。我意识到这不是一个整洁的数据,但这正是我努力实现的目标。当然,聚合对我来说是非常直观的,但我一直在尝试学习dplyr语言,因为它的基准速度更快,接受的不仅仅是dataframes@RyanCastner谢谢你的反馈。但是,在某些情况下,我发现有基本R
解决方案是有用的。例如,最近,我不得不在Alteryx中实现一个GROUPBY操作,但是可用的版本在使用dplyr时存在一些问题。所以,我们必须求助于R基地。