2015-04-16 93 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