【发布时间】:2013-06-18 14:57:28
【问题描述】:
我有一个数据集,其中一列包含 yes、no 和 NA 的条目。我想用1 替换任何NA,并用0 替换任何非NA 条目。 Ifelse 将非NA 条目替换为0,但不会将NA 条目替换为1。我需要为此使用is.na() 命令。为什么is.na() 能在ifelse 不能工作的地方工作?
我在下面定义了一个可重现的示例,该示例从定义为因子的列开始,因为这就是我获取数据的方式。
q <-as.factor(c(NA, "yes", "no", "yes", NA))
## Does not work
q <- ifelse(q == "NA", 1, 0)
q
### Returns: [1] NA 0 0 0 NA
## Does not work
q[q == "NA"] <- 1
q
### Returns: [1] NA 0 0 0 NA
## This works
q[is.na(q)] <- 1
q
### Returns: [1] 1 0 0 0 1
存在一些其他条目,但它们似乎没有这个确切的问题。
https://stackoverflow.com/a/8166616/1364839 -- 这个答案表明 is.na() 有效,但不是 ifelse 失败的原因。
【问题讨论】:
-
ifelse没有任何问题。您正在做两个完全不同的逻辑比较。字符串“NA”与NA无关。 -
阅读
?base::Logic和?NA。 -
阅读
?base::Logic和?NA。ifelse( is.na(q) , 1, 0) -
您不能与 NA 值进行任何比较,任何与 NA 的比较都会导致 NA。试试这个:
c(NA=="yes",NA==NA,NA=="NA",NA==1,is.na(NA)) -
@DTRM 我更新了评论-我需要咖啡,看
?is.na,实际上,而不是ifelse只是做as.integer( is.na( q ) )- 更新 - 哦,那是你是做。那么这是什么问题呢?!!
标签: r dataset na if-statement