【问题标题】:Group means excluding individuals and having NA's组意味着排除个人并拥有 NA
【发布时间】:2017-03-10 22:43:54
【问题描述】:

在之前的链接中: Calculating a group mean while excluding each cases individual value

matt_k 对计算组意味着排除个人做了一个聪明的回答。他提出以下建议:

set.seed(123)
df <- data.frame(group = rep(letters[1:3], each = 3), 
             value = rnorm(9), stringsAsFactors = F)
df$loo_mean <- unlist(tapply(df$value, df$group, 
                 function(x) (sum(x) - x) / (length(x) - 1)))
df

但是代码没有正确处理 NA,因为如果该组有 NA,它会为该组的所有个人产生 NA。 谁能解决这个问题?

【问题讨论】:

    标签: r


    【解决方案1】:

    在调用函数之前省略 NA。

    na.omit(df)
    

    【讨论】:

    • 谢谢,但我不应该这样做,我想按类别计算一些变量的平均值,这样做意味着省略大量观察结果,保留估计值可能很有趣。
    • 在您的估计中应该如何计算 NA?
    • 假设我想计算一个二分变量的平均值,表示个人是否吸烟。我想测试其他班级中吸烟者的比例是否是个人吸烟的重要预测因素。但同时,我想用其他变量的类均值(不包括个体)作为吸烟者比例的工具变量。正如我在下面发布的示例,这意味着类中只有一个 NA 将意味着变量的类均值对于所有类都将具有 NA。
    【解决方案2】:

    解决方案很简单。将na.rm = TRUE 添加到sum

    比较

    > sum(c(1:3, NA), na.rm = FALSE)
    [1] NA
    

    > sum(c(1:3, NA), na.rm = TRUE)
    [1] 6
    

    有关详细信息,请参阅?sum

    【讨论】:

    • 谢谢,但我想要更详细的代码。我对超过 30,000 名学生进行了一项调查。有很多学校和班级,所以我不能按班级计算平均班级,我试图在函数和 tapply 命令中包含 na.rm=TRUE 但有错误消息。
    • @JoseJulian 请提供一个带有 NA 的示例以及预期结果的样子。
    • set.seed(123) df
    • 我希望观察值 5、6、7 和 9 具有该组其余非缺失观察值的组平均值(这种情况太简单了,例如,对于观察 9,有只是计算平均值的第七个观察值。
    • @JoseJulian 请编辑您的原始问题,cmets 不是为传递数据而设计的。
    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    相关资源
    最近更新 更多