【发布时间】:2019-08-23 00:01:16
【问题描述】:
我有一个数据表,其中我根据它们所属的集群标记了行,并计算了行列值的平均值。我想为每个集群选择中间行。
例如,只看一个,我想用:
median(as.numeric(as.vector(subset(df,df$cluster == i )$avg)))
我看出来了
> as.numeric(as.vector(subset(df,df$cluster == i )$avg))
[1] 48.11111111 47.77777778 49.44444444 49.33333333 47.55555556 46.55555556 47.44444444 47.11111111 45.66666667 45.44444444
然而,中位数是
> median(as.numeric(as.vector(subset(df,df$cluster == i )$avg)))
[1] 47.5
我想通过将返回的中值与列中的平均值进行匹配来找到中值记录,但使用此返回值是不可能的。
我找到了一些关于使用均值函数舍入的文档和问题,但不幸的是,这似乎并不适用。
我也可以限制数据的小数位,但有些记录会太接近,如果四舍五入到小数点后重复将很常见。
【问题讨论】:
-
当输入有偶数个值(比如你有 10 个值)时,中间没有直接值。在偶数输入的情况下,中位数(R 实现)averages the two middle values 的标准定义。您可以
rank数据,并且在偶数长度输入的情况下选择n/2或n/2 + 1记录。