用R中的子组的平均值替换缺失的数据

时间:2015-06-18 22:18:15

标签: r data-cleaning

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

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   
 ...     ...    ... 

我想要做的是能够在var1的平均值为va1的情况下填写var2的NA值,并且var3var1 var1

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

var1列中的第二个NA缺少var2 = 2.1.信息,因此会给出means <- tapply(var2, var3, mean, na.rm=T) var1[is.na(var1)] <- means[match(var3[is.na(var1)], sort(unique(var3)))]

所有其他var oauthOptions = { client_id: '<My client ID value>', redirect_uri: '<My reply url>', response_type: 'code', prompt: 'admin_consent', resource: encodeURIComponent('https://graph.microsoft.com/') }; var oauthUrl = 'https://login.microsoftonline.com/b678e2cc-6ccc-44a6-9802-176bc170d680/oauth2/authorize?api-version=1.0' + '&response_type=' + oauthOptions.response_type + '&redirect_uri=' + oauthOptions.redirect_uri + '&client_id=' + oauthOptions.client_id + '&prompt=' + oauthOptions.prompt + '&resource=' + oauthOptions.resource; window.location.href = oauthUrl; 值的平均值

我对R比较新,我似乎无法让条件逻辑正确 - 提前感谢!

2 个答案:

答案 0 :(得分:3)

  

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

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

override func viewDidLoad() { super.viewDidLoad() var gamescore = PFObject(className:"_User")
    gamescore["Score"] = self.Label.text
    gamescore.saveInBackgroundWithBlock {
        (success: Bool, error: NSError?) -> Void in
        if (success) {

        } else {

        }
    } 

答案 1 :(得分:3)

你应该做多次插补:

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

显然,使用更多数据可以更好地工作,其他插补方法可能会产生更好的结果。研究文档。