我是dplyr / tidyverse的新手,如果给定列中的值超过给定值,我想对数据集的行求和。例如,鉴于此数据框,
a<-c(2,3,2,1,0)
b<-c(2,3,3,2,1)
z<-c(3,2,1,1,0)
data.abz <- data.frame(a,b,z)
data.abz
a b z
1 2 2 3
2 3 3 2
3 2 3 1
4 1 2 1
5 0 1 0
如果a或b列中的值大于1并且z列中的值大于0,我想对行进行求和。如果不满足条件,则行的总和为0。例如, 给定上一个数据框,我想得到以下内容,
a b z sum_values
1 2 2 3 7
2 3 3 2 8
3 2 3 1 6
4 1 2 1 3
5 0 1 0 0
最后两行不满足条件,因此将它们的值指定为0。这是我所做的,但是我确信有更好的方法来实现这一点。
data.abz <- data.frame(a,b,z) %>%
mutate_at(vars(c(a,b)),
function(x) case_when(x < 2 ~ 0, TRUE~as.double(x)))%>%
mutate(sum_values = rowSums(.[1:3]))
使用R and dplyr
有更多惯用和更好的主意吗?
答案 0 :(得分:0)
我喜欢使用dplyr
的{{1}}函数进行条件计算。但是根据您的需求,您可能还需要其他东西。
case_when
该代码产生的结果与您的结果不同(特别是第4行),但是请告诉我它是否有效。或对您想要的输出进行更多说明。