【问题标题】:Calculating a group mean while excluding each cases individual value计算组平均值,同时排除每个案例的单个值
【发布时间】:2014-05-19 01:42:00
【问题描述】:

我有一个包含 70 个案例(一项研究的参与者)的数据集。是否有一个函数可以计算这 70 个案例的平均值,这样每个案例都不包含在分析中。这看起来像:

"mean for case x = (value(1) + ... value(n) - value(x))/n"

任何信息都会有所帮助。

【问题讨论】:

  • 你的意思是遗漏类型分析吗?我认为这更像是一个统计问题。
  • 是的。但我认为 SPSS 没有完成这项工作的工具,所以我想我会尝试在 r 中构建一个可以做到这一点的函数。

标签: r analysis


【解决方案1】:

您可以按照您的建议去做,然后从总数中删除每个案例:

x <- c(1:10)
(sum(x) - x) / (length(x) - 1)

#[1] 6.000000 5.888889 5.777778 5.666667 5.555556 5.444444 5.333333 5.222222 5.111111 5.000000

mean(2:10)
#[1] 6
mean(1:9)
#[1] 5

编辑: 更新以尝试解决 cmets 中的后续问题:

set.seed(123)
df <- data.frame(group = rep(letters[1:3], each = 3), 
                 value = rnorm(9), stringsAsFactors = F)
df

#group       value
#1     a -0.56047565
#2     a -0.23017749
#3     a  1.55870831
#4     b  0.07050839
#5     b  0.12928774
#6     b  1.71506499
#7     c  0.46091621
#8     c -1.26506123
#9     c -0.68685285

df$loo_mean <- unlist(tapply(df$value, df$group, 
                      function(x) (sum(x) - x) / (length(x) - 1)))
df

  #group       value    loo_mean
#1     a -0.56047565  0.66426541
#2     a -0.23017749  0.49911633
#3     a  1.55870831 -0.39532657
#4     b  0.07050839  0.92217636
#5     b  0.12928774  0.89278669
#6     b  1.71506499  0.09989806
#7     c  0.46091621 -0.97595704
#8     c -1.26506123 -0.11296832
#9     c -0.68685285 -0.40207251

mean(df$value[2:3])
#[1] 0.6642654
mean(df$value[c(7,9)])
#[1] -0.1129683

【讨论】:

  • 聪明。我本来打算建议 sapply(seq_along(x), function(i) mean(x[-i])) 但这更好。
  • 伟大的头脑,嘿@thelatemail?完全相同,一直到 i
  • 嘿,谢谢!我正在为数组的一列计算这个,我想计算一列的平均值,不包括每个单独的情况。在这种情况下,而不是您用作示例的向量,有什么变化?
  • 应该不会有太大变化。当您说数组时,您的意思是 R 数组还是矩阵或 data.frame?如果您有一个特定的数据结构,它有助于提供一个小例子来说明您的数据是什么样的(例如dput(head(data)))。
  • 您应该尝试在最初的问题中尽可能多地发布您的数据以及您实际尝试做的事情。我会尝试根据您告诉我的内容更新我的答案,但请看一下。 stackoverflow.com/questions/5963269/…
【解决方案2】:

这是一种矢量化方法,以避免一次平均每个子集:

x <- runif(70)
sapply(seq_along(x), function(i) mean(x[-i]))

【讨论】:

  • 我误读了@matt_k 的解决方案,发现它当然也是矢量化的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多