r - 计算配对样本中的秩数

r - Count the number of ranks in a paired sample

基本上我得到了一个配对样本说:

X = c(14, 5, 2, 8 , 9, 10)

Y = c(7, 3, 4, 13, 11, 12)

如果我将两个样本排序并配对成 Z,我可以使用什么函数来记录 Z 中的秩数?

Z = c(2, 3, 4, 7, 8, 9, 10, 11, 12, 13)

所以 Z 现在是

Z = (X, Y, Y, Y, X, X, X, Y, Y, Y, X)

我如何计算 X 运行的数量,在这种情况下是 3 个大小为 1、2 和 1 我试过 rle() 函数,但我不明白如何 return 不同的 X 和 Y

要获取Z中每个值的运行次数,可以使用rle(),首先找到Z中的哪些值在X or Y中,然后再次对 TRUE

的值进行子集化
rle(Z %in% X)$lengths[rle(Z %in% X)$values]
#[1] 1 3
rle(Z %in% Y)$lengths[rle(Z %in% Y)$values]
#[1] 3 3

正如@docendo discimus 指出的那样,可以写成

with(rle(Z %in% X), lengths[values])
with(rle(Z %in% Y), lengths[values])

在哪里

Z %in% X ## gives
TRUE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE

然后在 TRUE/FALSE 向量上使用 rle 给我们每个 TRUE/FALSE

runs
rle(Z %in% X)  ## gives
    Run Length Encoding
  lengths: int [1:4] 1 3 3 3
  values : logi [1:4] TRUE FALSE TRUE FALSE

所以我们可以分别取 lenghtsvalues 分量,然后对 lenghts 进行子集化,其中 values == TRUE


数据

X <- c(14, 5, 2, 8 , 9, 10)
Y <- c(7, 3, 4, 13, 11, 12)
Z <- c(2, 3, 4, 7, 8, 9, 10, 11, 12, 13)