我对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)
如何添加条件正值?
答案 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