如何从排名数据中排名第一个样本
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
串联的 x
和 y
向量。 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
我有两个样本 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
串联的 x
和 y
向量。 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