【问题标题】:The Data Type of All Values Has Been Converted to the Character After Replacing NA Value with "NA"将NA值替换为“NA”后,所有值的数据类型已转换为字符
【发布时间】:2019-09-11 18:38:14
【问题描述】:

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

【问题讨论】:

  • NA 不应被引用。然后它变成一个字符串不清楚你为什么要这样做。列应保持原样,而不是对"NA"进行任何更改@
  • 当您将向量中的某些元素更改为字符时,该向量中的所有元素都必须是字符类型,因为一个向量不能有两种不同的类型。为什么需要NA 成为"NA"?也许我们可以用另一种方式解决这个问题。
  • @iod。感谢您的回答。我这样做的原因是我使用if 语句为不同的条件生成不同的输出。 (例如检查两个值是否相同if (df2$i &gt; df2$h) {df2$h&lt;-"smaller"} ) 但是,如果一个值是NA,则无论另一个值是什么,它都会返回NA作为结果。

标签: r


【解决方案1】:

这是对您在评论中描述的问题而不是原始问题的答案:

有两种方法可以解决这个问题 - 要么在 if 语句之前加上 if (is.na(df2$i)) 之类的东西,并为如果有 NA 会发生什么设置规则,或者你可以创建一组函数来替换运算符并且知道如何以对您有意义的方式处理 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 不大于 y,它将返回 FALSE。当然,您选择如何处理NAs 可能会有所不同。

然后你可以用if (bigger_than(df$i, df$h)) df$h1&lt;-"smaller"之类的东西替换你的if语句。

顺便说一句,再次注意,如果您将 df$h 替换为字符串(例如,“较小”),R 会将整个列的类型更改为 char - 因此您希望将这些 char 字符串保存在其他地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 2022-01-24
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多