除了一个之外,平均所有变量组的值

时间:2016-11-02 06:02:49

标签: r

我有以下数据

 id    value

  a       2
  b       3
  c       4
  a       6

我希望排除某个组的所有数据的平均值。换句话说,我想将当前的id设置为分开并取其他所有ID的平均值,并为每个id重复它。例如,第一个将所有a分开并取bc的平均值为3.5(平均值为3和4)所以,我希望得到以下输出:

 id    value

  a       3.5
  b       4
  c       3.66

我的数据

df <- data.frame(id = c("a", "b", "c" , "a"), value = c(2,3,4,6) )

请注意,此问题与平均每个组

不同

2 个答案:

答案 0 :(得分:2)

一个选项是data.table

library(data.table)
setDT(df)[,  .(value = (sum(df$value) - sum(value))/(nrow(df)-.N)) , by =  id]
#   id    value
#1:  a 3.500000
#2:  b 4.000000
#3:  c 3.666667

如果我们需要'ids''b'和'c'的6和5.5

 setDT(df)[, .(value = (sum(df$value) - sum(value))/(uniqueN(df$id)-1)) , by = id]
 #   id value
 #1:  a   3.5
 #2:  b   6.0
 #3:  c   5.5

答案 1 :(得分:1)

plyr::ddply(df,'id',function(x){ c(value = mean(df[with(df,id != x$id[1]),]$value)) })