RowSums以值为条件

时间:2018-07-27 02:21:05

标签: r sum conditional

我对r很陌生,有一个看起来很简单的问题。 我想做rowSums,但只包括特定范围内(例如,大于0)的总和值。

例如-最后一列是请求的金额

  col1  col2  col3  col4 totyearly
1   -5     3     4    NA      7
2    1     40   -17   -3     41
3   NA     NA    -2   -5      0
4   NA     1      1    1      3  

我目前拥有的是:

df$totyearly <- rowSums(df[, 1:4], na.rm=TRUE)

如何添加条件正值?

3 个答案:

答案 0 :(得分:4)

我们可以使用replace将小于0的值替换为0,然后取rowSums

df$totyearly <- rowSums(replace(df, df < 0, 0), na.rm = TRUE)
df

#  col1 col2 col3 col4 totyearly
#1   -5    3    4   NA         7
#2    1   40  -17   -3        41
#3   NA   NA   -2   -5         0
#4   NA    1    1    1         3

答案 1 :(得分:1)

您可以编写自己的自定义求和函数并将其apply插入每一行:

df <- read.table(text = "
  col1  col2  col3  col4 totyearly
  1   -5     3     4    NA      7
  2    1     40   -17   -3     41
  3   NA     NA    -2   -5      0
  4   NA     1      1    1      3",
header = TRUE)

#define custom sum function 
sum.pos <- function(x) sum(x[x > 0], na.rm = TRUE)

#apply it to each row
df$totyearly <- apply(df[ , 1:4], 1, sum.pos)

#or equivalently
df$totyearly <- apply(df[ , 1:4], 1, function(x) sum(x[x > 0], na.rm  = TRUE))

答案 2 :(得分:1)

乘以逻辑检查,然后求和:

rowSums(df * (df >= 0), na.rm=TRUE)
# 1  2  3  4 
# 7 41  0  3