2015-04-16 120 views
4

我在計算一個結果變量的簡單平均值,但只計算與另一個運行變量的最大實例關聯的結果,並按照因子進行分組。通過一個因子計算平均值[r]

當然,計算的統計量可以替代任何其他函數,並且組內的評估可以是任何其他函數。

library(data.table) #1.9.5 
dt <- data.table(name = rep(LETTERS[1:7], each = 3), 
       target = rep(c(0,1,2), 7), 
       filter = 1:21) 
dt 

## name target filter 
## 1: A  0  1 
## 2: A  1  2 
## 3: A  2  3 
## 4: B  0  4 
## 5: B  1  5 
## 6: B  2  6 
## 7: C  0  7 

有了這個框架,所需的輸出應該返回平均值爲目標,以滿足正好2.

有點像標準:

dt[ , .(mFilter = which.max(filter), 
     target = target), by = name][ , 
     mean(target), by = c("name", "mFilter")] 

...似乎接近,但不是很正確。

該解決方案應該返回:

## name V1 
## 1: A 2 
## 2: B 2 
## 3: ... 
+3

您的意思是您的標題欄'name','target'和'filter'而不是'組','target'和'cond'? –

+0

你能真正顯示你正在尋找的輸出嗎? –

+0

對不起,名字是錯誤的。昨天晚上打了,今天發佈了... – alex

回答

4

你可以這樣做有:

dt[, .(meantarget = mean(target[filter == max(filter)])), by = name] 
# name meantarget 
# 1: A  2 
# 2: B  2 
# 3: C  2 
# 4: D  2 
# 5: E  2 
# 6: F  2 
# 7: G  2 
+0

釘住了它。現在看看我的簡化是否適合真實的數據。 – alex