用“ NA”替换NA值后,所有值的数据类型已转换为字符

时间:2019-09-11 18:38:14

标签: r

我想将数据帧的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值的数据类型不变。请帮助,谢谢。

1 个答案:

答案 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字符串保存在其他位置

相关问题