群组意味着排除个人并拥有NA

时间:2017-03-10 13:12:13

标签: r

在之前的链接中: 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。 任何人都可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

在调用函数之前发现NAs。

na.omit(df)

答案 1 :(得分:0)

解决方案很简单。将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