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

R 如何将NA从因子向量转换为0的值,r,na,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

我想将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

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

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

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

levels(myVec) <- 0:2

levels(myVec)是的,卢克的答案更好。您需要添加因子级别。我的错;参见Lukes的回答。最后一个函数实际上起作用了。第一个函数将myVec的值更改为[1]0 0 1 0它应该是[1]0 1 2 0或者,使用我最喜欢的
replace
函数:
因子(replace(myVec,is.na(myVec),0))
levels(myVec) <- 0:2
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