【问题标题】:How to sum the value for certain condition in R? [closed]如何对R中某些条件的值求和? [关闭]
【发布时间】:2018-08-24 07:13:34
【问题描述】:

我有很多列表,我想对最小值小于 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。 请给我一个提示,我该怎么做。谢谢

【问题讨论】:

  • minlist1 &lt;=3 返回FALSE/TRUE,编码为0/1TRUE 有 2 个值,总和为 2。
  • Roman 的方式推荐使用sapply,但要完成你的尝试,如果你使用lapply,你需要使用sum(unlist(minlist1[minlist1 &lt;=3]))

标签: r list sum min


【解决方案1】:

你快到了。当您检查minlist1 &lt;= 3 时,返回的结果是TRUE、TRUE、FALSE。当您尝试对逻辑向量求和时,TRUE 被强制为 1,FALSE 被强制为 0。您需要明确地对通过过滤器的元素进行子集化。

试试

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

【讨论】:

    【解决方案2】:

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

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-27
      • 2021-12-28
      • 2023-01-25
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多