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