dplyr n_与条件不同

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 我试图实现的最终结果是将两个语句合并到一个调用中,从而得到如下结果

使用dplyr总结数据集,我想调用n_distinct来计算列中唯一出现的次数。但是,我还想对满足另一列条件的列中的所有唯一事件执行另一个summary()

名为“a”的数据帧示例:

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基地。