#r #sorting #rank
Вопрос:
У меня есть два образца 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
но он возвращает неправильный ответ, правильный должен быть
1.0 2.5 4.0 5.5
Ответ №1:
Вам не нужно 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
Ответ №2:
Мы также можем использовать head
на length
«x»
head(rank(c(x, y)), length(x))
[1] 1.0 2.5 4.0 5.5
Ответ №3:
Возможно, было бы безопаснее поместить образцы в фрейм данных, чего вы легко можете достичь с 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