【问题标题】:Summing up a logical vector in R在R中总结一个逻辑向量
【发布时间】:2019-02-06 20:20:30
【问题描述】:
patt<-c(`205` = FALSE, `210` = TRUE, `16` = TRUE, `2` = FALSE)    
totalobs<-0
{for (element in patt)
    if (element == TRUE){
    print (element)
    totalobs=totalobs+sum(element)
    }
print (totalobs)
}

我有一个逻辑向量 see here,其中我想添加 TRUE 的所有值。使用上面的代码,我只能将 TRUE 出现在这个向量中的次数相加,而不是每个 TRUE 值之上的数字。我对 R 很陌生,我该如何解决这个问题?

【问题讨论】:

  • sum(patt) 也许。请分享一个最小的reproducible example 并显示预期的输出。
  • 谢谢,我试过了,它也加起来为 10。也许更多信息:patt 变量是从 mice 包 (md.pattern) 生成的,如果一行有一个 NA,它会分配一个 TRUE值,当它没有 NA 或多个 NA 时为 FALSE。
  • 请分享示例数据,使用dput,如我之前发布的链接所示。
  • 谢谢。我更新了我原来的帖子。
  • 太棒了!您要寻找的结果是什么?

标签: r logical-operators


【解决方案1】:

我们可以使用pattnames(patt) 进行子集化,将结果转换为数值向量,最后使用sum 得到所需的输出,如下所示

sum(as.numeric(names(patt)[patt]))
#[1] 226

如果你需要更频繁地进行这种计算,那就写一个小函数

Janne <- function(x) {
  sum(as.numeric(names(x)[x]))
}

Janne(patt)

【讨论】:

  • 非常感谢,这很好用!感谢您的帮助!
猜你喜欢
  • 2021-07-26
  • 2015-01-04
  • 2021-06-20
  • 2018-11-08
  • 1970-01-01
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
相关资源
最近更新 更多