我有一個數據集,其中一列包含條目yes
,no
和NA
。我想用1
替換任何NA
,並用0
替換任何非NA
條目。 Ifelse
用0
代替非NA
條目,但不代替1
的NA
條目。我需要使用is.na()
命令。爲什麼is.na()
在ifelse
不工作?爲什麼Ifelse無法取代NAs?
我在下面定義了一個可重複的例子,它以定義爲一個因子的列開始,因爲這就是我得到數據的方式。
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」無關。 – joran
閱讀'?base :: Logic'和'?NA'。 –
如何在ifelse中直接引用'NA'? –