如何将NA从因子向量转换为值0

时间:2015-02-16 00:04:15

标签: r na

我想将NA从因子向量转换为值0

这是一个例子

myVec <- c(NA, 1, 2, NA)
myVec
[1] NA  1  2 NA

myVec <- factor(myVec)
[1] <NA> 1    2    <NA>
Levels: 1 2

for(i in 1:4){  
if(  is.na(myVec[i])  ) { myVec[i] = "0"}
}

Warning messages:
1: In `[<-.factor`(`*tmp*`, i, value = "0") :
  invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, i, value = "0") :
  invalid factor level, NA generated

2 个答案:

答案 0 :(得分:2)

您可以将0添加到可能的因子值

levels(myVec) <- 0:2

并将NA值替换为0

myVec[is.na(myVec)] <- 0
myVec
# [1] 0 0 1 0
# Levels: 0 1 2

或者,事先创建因子时......

(myvec <- factor(ifelse(is.na(myVec), 0, myVec)))
# [1] 0 1 2 0
# Levels: 0 1 2

答案 1 :(得分:1)

一种方法可能是创建一个逻辑向量,其中包含特定向量条目是否为na,然后将值0分配给每个匹配条目。 E.g

navector <- is.na (myVec)
myVec [navector] <- 0

实际上,甚至可以在一行中完成上述

myVec [ is.na (myVec) ] <- 0