如何在向量中仅对一个符号值求和

时间:2014-03-08 13:47:46

标签: r

我有一个具有正值和负值的avector,并希望将负值和正值分开加起来。

如果我这样做,我会添加具有正号的元素数量,但不会添加具有正值的元素值。

sum(x>0) 

如何在向量

中分别添加正值和负值

谢谢

2 个答案:

答案 0 :(得分:5)

x>0判断元素是否为正数:

> x <- c(-1, -10, 6, 7, -5)
> x>0
[1] FALSE FALSE  TRUE  TRUE FALSE # elements at positions 3 and 4 are positive

您现在可以使用which来选择符合该条件的元素的索引:

> which(x>0)
[1] 3 4 # x[3] and x[4] meet the condition

其余的从那里开始:

> sum(x[which(x>0)])
[1] 13
> sum(x[which(x<0)])
[1] -16

R也适用于FALSE - TRUE的向量来索引向量,所以你也可以这样做:

> sum(x[x>0])
[1] 13
> sum(x[x<0])
[1] -16

答案 1 :(得分:1)

有几种可能性如下

w <- c(2, -2, 1, -4)
tapply(w, sign(w), sum)
# -1  1 
# -6  3 
c(sum(w[w > 0]), sum(w[w < 0]))
# [1]  3 -6
c(sum(w * (w > 0)), sum(w * (w < 0)))
# [1]  3 -6