median(x) 无法正确返回 x 的中间值

问题描述 投票:0回答:2

我对 R 有一个非常令人沮丧的问题。我想要的相当简单:我有一个数值向量(没有

NA
)并且想要计算中值。为了执行这个简单的任务,我编写了以下行:

#returning 4.0585
medianOfVector <- median(dataFrame$colname)

但是,我必须意识到该行返回的值与执行以下行时得到的数字不匹配:

#returning 1048
lengthOfVector <- length(dataFrame$colname)
#returning 4.1355
medianOfVector2 <- (dataFrame$colname[524]+dataFrame$colname[525])/2

据我理解,

median()
函数应该返回正好位于向量中间的值(如果向量的长度是偶数,则返回中间两个值的平均值),但这似乎不是就这样吧。不幸的是,我无法跟踪
median()
函数正在执行的步骤,因此我无法解决问题。 有人可以帮忙,或者告诉我哪里可能犯了错误吗?

r dataframe statistics median
2个回答
2
投票

中位数是排序值的中间值。在找到这个中间值之前,您是否对该列进行了排序?这是一个玩具演示,说明如果值未排序,可能会出现什么问题。

## a vector of even length
set.seed(0); x <- sample.int(10)
#[1]  9  4  7  1  2  5  3 10  6  8

## true value
median(x)
#[1] 5.5

## values are unsorted
is.unsorted(x)
#[1] TRUE
## "middle" value
0.5 * (x[length(x) / 2] + x[length(x) / 2 + 1])
#[1] 3.5

## correct calculation with sorted values
sx <- sort(x)
## "middle" value
(sx[length(x) / 2] + sx[length(x) / 2 + 1]) / 2
#[1] 5.5

0
投票

我也遇到这个问题了。当我输入以下内容:中位数(56, 64, 69, 70, 71, 70, 64)时,RStudio告诉我答案是56。这是不正确的,因为答案应该返回为69。

© www.soinside.com 2019 - 2024. All rights reserved.