【问题标题】:How to impute missing values with row mean in R如何用R中的行平均值估算缺失值
【发布时间】:2014-05-03 07:35:06
【问题描述】:

从一个大数据框中,我提取了一行数值数据并保存为向量。某些值缺失并标记为 NA。我想用行均值来估算缺失值。

谢谢

【问题讨论】:

    标签: r na


    【解决方案1】:

    x 成为你的向量:

    x <- c(NA,0,2,0,2,NA,NA,NA,0,2)
    ifelse(is.na(x), mean(x, na.rm = TRUE), x)
    # [1] 1 0 2 0 2 1 1 1 0 2
    

    或者如果你不关心原始向量,你可以直接修改它:

    x[is.na(x)] <- mean(x, na.rm = TRUE)
    

    【讨论】:

    • 我的向量在我使用 as.numeric 转换为数字后如下: [1] NA NA NA -0.58 0.23 -0.23 0.08 -0.62 0.55 -0.32 0.03 -0.56 [13] 0.47 -0.15 0.49 NA 0.23 -0.49 0.33 0.18 0.65 -0.29 NA NA 运行完您的代码示例后,我得到以下信息:[1] 3.857953e-18 3.857953e-18 3.857953e-18 -5.800000e-01 2.300000e-01 [6] -2.300000e-01 8.000000e-02 -6.200000e-01 5.500000e-01 -3.200000e-01
    • 我尝试将输出转换为数字,但没有成功。谢谢
    • 还有什么问题?你得到的数字是科学计数法吗?
    • 是的,我想转换成数字。谢谢
    • 它已经是数字了(见is.numeric(x),但由于平均值的浮点错误,它以科学计数法打印。如果你想减少一些浮点错误,所以“它打印得很好”,你可以做类似round(x * 1e5) / 1e5...
    【解决方案2】:

    使用这个:

    filter <- is.na(myVec)
    
    myVec[filter] <- colMeans(myDF[,filter], na.rm=TRUE)
    

    myVec 是您的向量,myDF 是您的 data.frame。

    【讨论】:

    • 我不想使用 myDF。是否可以仅使用 myVec 替换行本身中的缺失值?
    • @user466663,因此需要在编写问题时从不相关中找出相关的内容。你应该从“我有一个向量...”开始
    • @flodel,确实,你已经成功地读懂了 OP 的思想和我的思想。谢谢!
    猜你喜欢
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多