使用dplyr的数据帧行的条件总和

时间:2018-06-28 12:08:43

标签: r dataframe dplyr

我是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有更多惯用和更好的主意吗?

1 个答案:

答案 0 :(得分:0)

我喜欢使用dplyr的{​​{1}}函数进行条件计算。但是根据您的需求,您可能还需要其他东西。

case_when

该代码产生的结果与您的结果不同(特别是第4行),但是请告诉我它是否有效。或对您想要的输出进行更多说明。