按条件在因子内计算平均值 [R]

4

我希望计算一个结果变量的简单平均值,但仅针对与另一个运行变量的最大实例相关联的结果,并按因素分组。

当然,可以将计算出的统计量替换为任何其他函数,并且组内评估可以是任何其他函数。

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
你的意思是,你想将列标题命名为“名称”、“目标”和“筛选器”,而不是“组”、“目标”和“条件”吗?请确认。 - David Robinson
你能展示一下你想要的输出吗? - Richard Border
1个回答

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

做得好。现在看看我的简化是否对真实数据正确。 - alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接