我对 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()
函数正在执行的步骤,因此我无法解决问题。
有人可以帮忙,或者告诉我哪里可能犯了错误吗?
中位数是排序值的中间值。在找到这个中间值之前,您是否对该列进行了排序?这是一个玩具演示,说明如果值未排序,可能会出现什么问题。
## 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
我也遇到这个问题了。当我输入以下内容:中位数(56, 64, 69, 70, 71, 70, 64)时,RStudio告诉我答案是56。这是不正确的,因为答案应该返回为69。