r - 根据条件对组的数据帧的不同级别进行计数

标签 r group-by dplyr conditional-statements summarize

我有以下 DF

x = data.frame('grp' = c(1,1,1,2,2,2),'a' = c(1,2,1,1,2,1), 'b'= c(6,5,6,6,2,6), 'c' = c(0.1,0.2,0.4,-1, 0.9,0.7))

  grp a b    c
1   1 1 6  0.1
2   1 2 5  0.2
3   1 1 6  0.4
4   2 1 6 -1.0
5   2 2 2  0.9
6   2 1 6  0.7 

我想计算每个组的 (a,b) 的不同级别,其中 c >= 0.1

我尝试使用 dplyr 使用 group_bysummarise 但没有得到所需的结果

x %>% group_by(grp) %>% summarise(count = n_distinct(c(a,b)[c >= 0.1]))

对于上述情况,我期望以下结果

    grp count
  <dbl> <int>
1     1     2
2     2     2

但是使用上面的查询我得到以下结果

    grp count
  <dbl> <int>
1     1     4
2     2     3

从逻辑上讲,上面的输出似乎正在解决 (a,b) 连续列表的所有唯一值,但不是我所需要的 任何指示,非常感谢任何帮助

最佳答案

这是使用dplyr的另一种方法。听起来您想基于 c 进行过滤,所以我们就这么做了。我们可以将其写为 n_distinct(a, b),而不是在 n_distinct 中使用 c(a, b)。

x %>%
    filter(c >= 0.1) %>%
    group_by(grp) %>%
    summarise(cnt_d = n_distinct(a, b))

#     grp cnt_d
#   <dbl> <int>
# 1     1     2
# 2     2     2

关于r - 根据条件对组的数据帧的不同级别进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168278/

相关文章:

r - 如何将 .names 与 dplyr mutate 和匿名函数一起使用

r - 在一个 R 中组合多列

r - 管道到 R 函数中的 return() 时的奇怪行为?

r - 方便地移动列

r - 如何可视化R中...的列表列表?

Mysql 组命令

MySQL:GROUP BY特定时间段(重叠天数)

python - Pandas to_numeric 数值精度

r - 如何在 dplyr 的过滤器中正确使用 all?

mysql - 如何计算组总计?