【问题标题】:Replacing missing values coded by "." in an R dataframe替换用“.”编码的缺失值在 R 数据框中
【发布时间】:2016-11-17 13:55:07
【问题描述】:

我有一个缺失值由“.”编码的数据框,我想将这些值重新编码为 NA:

df <- data.frame("h"=c(1,1,"."))

我尝试以下方法:

df$h[df$h == "."] <- NA

NA 显示为<NA>,我无法执行mean(df$h,rm.na=TRUE) 之类的命令

有谁知道问题出在哪里?当我将数字重新编码为 NA 时没有问题

谢谢!

【问题讨论】:

  • 另外,我认为您的意思是na.rm = TRUE,而不是rm.na = TRUE

标签: r replace dataframe


【解决方案1】:

使用is.na 函数。无需转换为因子,尽管您具有字符值这一事实确实会强制转换您想要的数字。

> df <- data.frame("h"=c(1,1,"."))
> is.na(df) <- df=="."
> df
     h
1    1
2    1
3 <NA>

我不知道为什么@TylerRinker 删除了他关于使用“na.strings”的回复,因为我认为这是正确的答案。

评论:一年后看这个,我意识到a)OP误解了缺失值在因子或字符向量中是如何显示的,并且b)主要问题不是重新编码为R-的错误缺失值,OP 的代码已经正确完成了,而是@joran 识别的拼写错误。

【讨论】:

    【解决方案2】:

    问题是您的列 df$h 是一个因素。尝试先使其成为一个字符,然后替换“.”-values:

    df$h <- as.character(df$h)
    df$h[df$h == "."] <- NA
    

    在这里你可以看到结果:

    df[is.na(df$h),]
    

    当然,一旦你摆脱了点,如果你愿意,你可以将它转换成一个数字变量来计算:

    df$h <- as.numeric(df$h)
    

    【讨论】:

    • 实际上,列是一个因素这一事实并没有什么不同。您仍然可以匹配等于 "." 的值。正如您所指出的,真正的问题是您需要在计算平均值之前转换为数字。
    【解决方案3】:

    是的,没错,这是一个因素。首先通过以下语法将其转换为数字

    df <- transform(df, h=as.numeric(h)) 
    

    并用零替换缺失

    df$h[is.na(df$h)] <- "0" and then view the data View(df)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 2020-11-14
      • 2020-08-10
      • 2021-09-03
      • 1970-01-01
      • 2016-04-09
      相关资源
      最近更新 更多