我有一个变量的三个独立测量,它们受到很多噪声和零星的误差源的影响,这些误差可能非常大。我想丢弃离其他人最远的值,记住哪一个被丢弃,然后用剩下的两个计算平均值。例如,
a b c
15 6 7
11 10 3
5 12 6
会变成
a b c ave discard
15 6 7 6.5 15
11 10 3 10.5 3
5 12 6 5.5 12
答案 0 :(得分:0)
你的问题不明确。假设这三个值为1000
,2000
和3000
。哪个会丢弃?答案应该是1500
还是2500
?
如果您正在寻找的是对集中趋势的有力衡量,那么中位数可能是一个良好的开端(R中为?median
)。
答案 1 :(得分:0)
尝试:
ddf
a b c
1 15 6 7
2 11 10 3
3 5 12 6
ddf$ave = apply(ddf[1:3], 1, function(x) {
x = sort(x)
ifelse(abs(x[1]-x[2]) > abs(x[2]-x[3]), mean(x[2:3]), mean(x[1:2]))
}
)
ddf$discard = apply(ddf[1:3], 1, function(x) {
x = sort(x)
ifelse(abs(x[1]-x[2]) > abs(x[2]-x[3]), x[1], x[3])
}
)
ddf
a b c ave discard
1 15 6 7 6.5 15
2 11 10 3 10.5 3
3 5 12 6 5.5 12