【问题标题】:Replacing missing data with the mean of a subgroup in R用 R 中子组的平均值替换缺失数据
【发布时间】:2015-06-18 22:18:15
【问题描述】:

我有一个表,其中有一些缺失的数据,我想根据某些条件用其他一些相关数据的平均值替换这些数据。我有一些玩具数据来显示以下问题:

var1    var2    var3
123.1    2.1    113
166.5    2.1    113
200.3    2.1    112
 NA      2.1    113
 NA      2.1     NA 
212.1    3.3    112   
 ...     ...    ... 

我想要做的是能够用va1 的平均值填充var1 的NA 值,如果它们都具有相同的var2var3

即,对于 var1 列中的第一个 NA,这将在 var2 和 var3 上与第一个和第二个条目匹配,因此这将获得 (123.1 + 166.5) / 2 的值。

var1 列中的第二个 NA 缺少 var3 信息,因此将给出所有其他 var1 值的平均值,其中 var2 = 2.1.

我对 R 比较陌生,我似乎无法正确理解条件逻辑 - 在此先感谢!

【问题讨论】:

    标签: r data-cleaning


    【解决方案1】:

    我想要做的是能够用 var2 的平均值填充 var1 的 NA 值,如果它们都具有相同的 var3。

    嗯...我认为这不是您想要的,但要做到这一点:

    means <- tapply(var2, var3, mean, na.rm=T)
    var1[is.na(var1)] <- means[match(var3[is.na(var1)], sort(unique(var3)))]
    

    【讨论】:

    • 非常感谢 - 如果您不介意,我很想听听您为什么不认为我应该这样做(或被指向其他读物)。编辑:实际上我明白你的意思,我的意思是 var1 的意思,因为它们都匹配。哇——我的措辞太可怕了。我想我可以从你的回答中弄清楚。
    • 您的示例值为var1 提供以下值:[1] 123.1 166.5 200.3 2.1 NA 212.1。其中一件事与另一件事不同:)(提示它是 2.1)
    【解决方案2】:

    您应该改为进行多重插补:

    DF <- read.table(text = "var1    var2    var3
    123.1    2.1    113
    166.5    2.1    113
    200.3    2.1    112
     NA      2.1    113
     NA      2.1     NA 
    212.1    3.3    112 ", header = TRUE)
    
    library(mice)
    impDF <- mice(DF)
    plot(impDF)
    comDF <- complete(impDF, "long")
    
    library(data.table)
    setDT(comDF)
    comDF[, setNames(c(lapply(.SD, mean), lapply(.SD, sd)), 
                     c(paste0("var", 1:3), paste0("SDvar", 1:3))), 
          by = .id, .SDcols = paste0("var", 1:3)]
    #   .id   var1 var2  var3   SDvar1 SDvar2    SDvar3
    #1:   1 123.10  2.1 113.0  0.00000      0 0.0000000
    #2:   2 166.50  2.1 113.0  0.00000      0 0.0000000
    #3:   3 200.30  2.1 112.0  0.00000      0 0.0000000
    #4:   4 173.70  2.1 113.0 34.80718      0 0.0000000
    #5:   5 174.14  2.1 112.2 46.84131      0 0.4472136
    #6:   6 212.10  3.3 112.0  0.00000      0 0.0000000
    

    显然,这适用于更多数据,其他插补方法可能会产生更好的结果。研究文档。

    【讨论】:

    • 非常感谢 - 我现在会花一些时间研究一下。
    • 使用此方法一些注意事项。一般来说,对于一些基本的分析目的,hotdeck 或单独估算可能更有意义。无论如何,用户的问题并没有提供足够的细节来深入探讨。
    猜你喜欢
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 2018-02-05
    • 2012-05-03
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多