2016-04-16 56 views
2

設想一個數據表平均數與一個子集

ID Score 
1  10 
1  13 
1  12 
2  10 
3  6 
3  6 

平均爲用戶1是11.67。平均爲用戶2爲10的平均用戶3爲6。

我尋找將是((11.67 + 10 + 6)/ 3)= 9.223`

爲進行復制感受UniqAverage免費使用......

library(data.table) 
df = data.frame(ID=c(1,1,1,2,3,3), Score1=c(10,13,12,10,6,6)) 
dt = data.table(df) 

前一個問題導致我學習我可以做

dt[, mean(Score1), ID][,mean(V1)] 

要通過ID得到這個平均平均值。

但是,如果我只想得到10分以上的分數呢?

所以我風與

ID V1 
1  12.5 
2  0 
3  0 

所以我最後的結果將是4.167

企圖使用失敗。

dt[, mean(which(Score1) > 10), ID][,mean(V1)] 
+2

在大多數情況下(如果不是全部的話),計算平均值的情況不適用。見http://ksrowell.com/blog-visualizing-data/2014/05/09/is-an-average-of-averages-accurate-hint-no/ – PavoDive

+0

是的。這比我的簡單得多。我現在通過執行dt [dt [,Score1> 10],mean(Score1),ID] – Jibril

+1

來構建一個例子,例如'dt = data.table(...)'。不需要以'df = data.frame(..)'開始。 – Frank

回答

0

下面是與基礎R和解決方案aggregate

x <- aggregate(df, list(df$ID), function(x) mean(ifelse(x > 10, x, NA), na.rm = T))[,3] 
mean(ifelse(is.na(x), 0, x)) 
+0

re last line'mean(ifelse(is.na(x),0,x))'',我不確定是否mean 0期望值進一步的平均值計算。用非NAs計算的平均值替代它可能會更好。 – jangorecki

+0

我認爲它跟隨Jibril想要的輸出。對於'ID' 2和3,沒有'Score'> 10的情況,這些組的'均值'爲0。 –

2

我們對 'ID' 得 'Score1' 的meanunique 'ID' 的數據集,其中「Score1可以join 「大於10.

dt1 <- dt[Score1>10, .(V1= mean(Score1)), by = ID 
      ][data.table(ID= unique(dt$ID)), on = "ID"][is.na(V1), V1 :=0][] 
dt1 
# ID V1 
#1: 1 12.5 
#2: 2 0.0 
#3: 3 0.0 

dt1[, mean(V1)] 
#[1] 4.166667