如何从排名数据中排名第一个样本

How to the ranks of first sample from ranked data

我有两个样本 x 和 y,我正在尝试将它们与秩和检验进行比较。对于测试统计数据,我试图通过以下方式获得第一个样本的排名总和。

x <- c(1,2,3,4)
y <- c(2,4,5,7)

rank(sort(c(x,y)))
[1]  1.0 2.5 2.5 4.0 5.5 5.5 7.0 8.0

但是,我不知道如何从中得出第一个样本值的排名。这是我试过的

rank(sort(c(x,y)))[x]
[1] 1.0 2.5 2.5 4.0

但是returns答错了,正确的应该是

 1.0 2.5 4.0 5.5

您不需要 sort 串联的 xy 向量。 rank(c(x, y)) 的结果为您提供了 x 的排名,然后是 y 的排名,因此要获得 x 的排名,您可以执行以下操作:

rank(c(x, y))[seq_along(x)]
#> [1] 1.0 2.5 4.0 5.5

并获得 y 的排名,它是:

rank(c(y, x))[seq_along(y)]
#> [1] 2.5 5.5 7.0 8.0

我们也可以在 'x'

length 上使用 head
head(rank(c(x, y)), length(x))
[1] 1.0 2.5 4.0 5.5

也许将样本放入数据框可能更安全,您可以使用 stack() 轻松实现。

(dat <- stack(list(x=x, y=y)))
#   values ind
# 1      1   x
# 2      2   x
# 3      3   x
# 4      4   x
# 5      2   y
# 6      4   y
# 7      5   y
# 8      7   y

然后你可以通过 "x""y" 明确地做子集,你显然已经想到了。

with(dat, rank(values)[ind == 'x'])
# [1] 1.0 2.5 4.0 5.5

with(dat, rank(values)[ind == 'y'])
# [1] 2.5 5.5 7.0 8.0