【问题标题】:R Cases won't recognize results of is.na()R Cases 无法识别 is.na() 的结果
【发布时间】:2015-10-21 19:31:12
【问题描述】:

我正在尝试从向量d 创建一个因子,该因子指示d 的每个值是否缺失、小于threshhold 或大于/等于threshhold。我尝试使用以下代码,使用 memisc 包中的 cases 函数。

threshhold = 5
d <- sample(c(1:10, NaN), 50, replace=TRUE)
d_case <- cases(
  is.na(d),
  d > threshhold,
  d <= threshhold
)

并收到警告:In cases(is.na(d), d > threshhold, : condition is.na(d) is never satisfied

我也尝试过使用赋值运算符,

d_case <- cases(
  is.na(d)        -> 0,
  d > threshhold  -> 1,
  d <= threshhold -> 2
)

并得到同样的警告。我已经检查过了,d 确实包含 NaN 值,is.na() 应该返回为真(并且是,当我在案例之外检查它时)。有谁知道为什么案例不起作用,或者我可以做些什么来获得我需要的指标因素?

【问题讨论】:

  • 您从哪里获得cases 函数?这不是基本 R 的一部分。它还有助于提供带有示例输入和所需输出的 ​​reproducible example,以明确您要完成的工作。
  • 对于这个简单的例子,你也可以使用类似as.numeric(x &gt; threshold)的东西,加1,然后根据需要将0分配给NA元素。
  • @MrFlick 谢谢,我已经编辑了我的问题以表明案例来自 memisc,并包含生成示例数据的代码,以便问题可重现。

标签: r switch-statement warnings


【解决方案1】:

?cases根据文档你可以这样做

d <- c(-1:3,NA,1:2)
fun <- function(x){
  cases(
    is.na(x)        -> 0,
    x > threshhold  -> 1,
    x <= threshhold -> 2
  )
}
d_case <- fun(d)
d_cases

【讨论】:

    【解决方案2】:

    怎么样:

    addNA(as.factor(d>threshold))
    ....
    Levels: FALSE TRUE <NA>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-28
      • 2019-10-13
      • 1970-01-01
      • 2015-09-10
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多