如何解决R group_by并使用mutate在条件下对数据框列中的不同值进行计数
R group_by并使用mutate根据条件对数据框列中的不同值进行计数
这与问题R group by | count distinct values grouping by another column相似,但略有不同,因为我想与条件一起变异。不仅可以计算每个组中的不同值,而且还可以包含在向量 c
中id = c( 1,1,2,3,4,5,6,6 )
val = c(100,100,200,300,400,500,600,500)
df <- data.frame(id=id,val=val)
c= c(200,500)
我知道以下代码是错误的,但是它给出了我要执行的操作的想法。 因此,我想通过将 df 按ID分组来创建第四列,其中当在 c
中出现时,将给出不同值的计数x <- df %>% group_by(id) %>%
mutate(distinctValues = n_distinct(val %in% c ))
如果我们认为 id = 6,则其中存在的离散值是200,300和500。但是 c 中不存在300。因此,计数为= 2。
所以输出列将是
c(0,2)
解决方法
由于c
是唯一的,因此您可以用另一种方法来处理它-计算c
中显示的val
值的数量。
df %>%
group_by(id) %>%
mutate(distinctValues = sum(c %in% val))
# # A tibble: 14 x 3
# # Groups: id [6]
# id val distinctValues
# <dbl> <dbl> <int>
# 1 1 100 0
# 2 1 100 0
# 3 2 200 1
# 4 2 300 1
# 5 3 400 0
# 6 4 500 1
# 7 4 500 1
# 8 5 500 1
# 9 5 600 1
# 10 5 600 1
# 11 6 200 2
# 12 6 200 2
# 13 6 300 2
# 14 6 500 2
如果看似更清晰,您也可以使用distinctValues = sum(unique(val) %in% c)
-效率可能会稍低,但是除非数据量巨大,否则这并不重要。
使用n_distinct
,我们需要将其应用于行的子集
library(dplyr)
df %>%
group_by(id) %>%
mutate(distinctValues = n_distinct(val[val %in% c]))
-输出
# A tibble: 14 x 3
# Groups: id [6]
# id val distinctValues
# <dbl> <dbl> <int>
# 1 1 100 0
# 2 1 100 0
# 3 2 200 1
# 4 2 300 1
# 5 3 400 0
# 6 4 500 1
# 7 4 500 1
# 8 5 500 1
# 9 5 600 1
#10 5 600 1
#11 6 200 2
#12 6 200 2
#13 6 300 2
#14 6 500 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。