我想将数据帧的NA值转换为“ NA”(两个字符)。我应用了以下代码:
df2[is.na(df2)]<-"NA"
但是,这种方法将所有值的数据类型转换为字符类型。 这是一个示例:
> sd<-c(1,2,3,NA)
> sd
[1] 1 2 3 NA
> sd[is.na(sd)]<-"NA"
> sd
[1] "1" "2" "3" "NA"
我想要保持非NA值的数据类型不变。请帮助,谢谢。
答案 0 :(得分:0)
这是对您在评论中描述的问题的解答,而不是原始问题:
有两种解决方法-在if语句前加上if (is.na(df2$i))
之类的内容,并为存在NA
时的情况设定规则,或者可以创建一组函数取代运营商,并知道如何以对您有意义的方式处理资产净值。例如:
bigger_than<- function(x,y) {
if (is.na(x)) return(FALSE)
if (is.na(y)) return(TRUE)
if (x>y) return(TRUE) else return(FALSE)
}
如果x大于y或y为NA
,则返回TRUE;如果x为NA
(或实际上均为NA,则x),则返回FALSE。比y大。当然,您选择处理NA
的方式可能会有所不同。
然后,您可以将if
语句替换为if (bigger_than(df$i, df$h)) df$h1<-"smaller"
。
顺便说一句,请再次注意,如果将df$h
替换为字符串(例如,“ smaller”),R会将整个列的类型更改为char-因此您要将这些char字符串保存在其他位置