如何将R中特定条件的值求和?

时间:2018-08-24 07:13:34

标签: r list sum min

我有很多列表,我想将每个列表的最小值相加,最小值小于3。 对于瞬间,

a <- c(3,4,1,5,6)
b <- c(2,1,1,0,5)
c <- c(6,7,5,4,4)
list1 <- list(a,b,c)
minlist1 <- lapply(list1, min)
sum(unlist(minlist1 <=1))
> minlist1
[[1]]
[1] 1

[[2]]
[1] 0

[[3]]
[1] 4
> sum(unlist(minlist1 <=3))
[1] 2
#but according to the minlist1 the value should be sum up is 1 and 0
#so the result should be 1 no 2. 

但是根据minlist1,应该求和的值是1和0。因此结果应该是1否2。 请给我一个提示,我该怎么做。谢谢

2 个答案:

答案 0 :(得分:3)

您快到了。当您检查minlist1 <= 3时,返回的结果为TRUE,TRUE,FALSE。当您尝试对逻辑向量求和时,将TRUE强制为1,将FALSE强制为0。您需要显式子集通过过滤器的元素。

尝试

minlist1 <- sapply(list1, min)
sum(minlist1[minlist1 <= 3])
[1] 1

答案 1 :(得分:0)

只是为了向您展示另一种方式。

minlist1 <- unlist( sapply(list1, function(x){ res = min(x); if(res <=3) res else { NULL } }) )

sum(minlist1)

#[1] 1

请注意:

在这里,您使用的“技巧”中NULL不能存在于向量中,因此总和中的值> 3将被删除。在控制台中输入c(1,NULL,NULL,3)