我有以下 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_by
和 summarise
但没有得到所需的结果
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/