我有以下数据
id value
a 2
b 3
c 4
a 6
我希望排除某个组的所有数据的平均值。换句话说,我想将当前的id设置为分开并取其他所有ID的平均值,并为每个id重复它。例如,第一个将所有a
分开并取b
和c
的平均值为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) )
请注意,此问题与平均每个组
不同答案 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)) })