2016-11-02 37 views
1

的所有變量羣體的價值,我有以下數據平均除了一個

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

@MFR請使用@,這樣我會通知您的意見。我重新打開了它。 – akrun

+0

非常感謝@akrun – MFR

+0

3.5值看起來正確,但其他值呢?即'平均(c(2,4,6)) #[1] 4' – akrun

回答

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 

如果我們需要在6和5.5 'IDS' 'B' 和 'C'

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
plyr::ddply(df,'id',function(x){ c(value = mean(df[with(df,id != x$id[1]),]$value)) })