r-计算成对样本中的列组数

r-计算成对样本中的列组数,r,testing,sign,rank,R,Testing,Sign,Rank,我基本上得到了一个配对样本,比如: 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) 在本例中,如何计算尺寸为1、2和1的3个X梯段的数量 我已经尝试了rle()函数,但我不知道如何返回

我基本上得到了一个配对样本,比如:

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)
在本例中,如何计算尺寸为1、2和1的3个X梯段的数量
我已经尝试了rle()函数,但我不知道如何返回不同的X和Y来获得
Z
中每个值的运行次数,您可以使用
rle()
,首先通过查找
Z
的哪些值在
X或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])

在哪里

因此,在
TRUE/FALSE
向量上使用
rle
可以得到每个
TRUE/FALSE

rle(Z %in% X)  ## gives
    Run Length Encoding
  lengths: int [1:4] 1 3 3 3
  values : logi [1:4] TRUE FALSE TRUE FALSE
因此,我们可以分别获取
长度
组件,并将
长度
子集,其中
值==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

数据

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)

X要获得
Z
中每个值的运行次数,您可以使用
rle()
,首先通过查找
Z
中哪些值在
X或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])

在哪里

因此,在
TRUE/FALSE
向量上使用
rle
可以得到每个
TRUE/FALSE

rle(Z %in% X)  ## gives
    Run Length Encoding
  lengths: int [1:4] 1 3 3 3
  values : logi [1:4] TRUE FALSE TRUE FALSE
因此,我们可以分别获取
长度
组件,并将
长度
子集,其中
值==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

数据

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)

X您的
Z=(X,Y,Y,…)
与您的
Z=c(2,3,4…)不匹配。它应该是
Z=(X,Y,Y,Y,X,X,X,Y,Y)
5在Z中缺失。另外,您希望的输出是什么<代码>表格(rle(Z))
colSums(table(rle(Z2))
rle(Z%in%X)$length[rle(Z%in%X)$values]
这个问题很有趣,但您的示例仍然不符合您的要求。X/Y中的12个值在Z中变为10,然后在Z中变为11;Z中缺少5和14,并且您的预期结果与Z不匹配(1/2/1而不是1/3/1)。您的
Z=(X,Y,Y…)
Z=c(2,3,4…)不匹配。它应该是
Z=(X,Y,Y,Y,X,X,X,Y,Y)
5在Z中缺失。另外,您希望的输出是什么<代码>表格(rle(Z))
colSums(table(rle(Z2))
rle(Z%in%X)$length[rle(Z%in%X)$values]
这个问题很有趣,但您的示例仍然不符合您的要求。X/Y中的12个值在Z中变为10,然后在Z中变为11;Z中缺少5和14,并且您的预期结果与Z不匹配(1/2/1而不是1/3/1)。或者只是
rle(Z)$length[rle(Z)$value='X']
rle(Z)$length[rle(Z)$value='Y']
,不?@alistaire我假设他的
Z
就是
Z哦,我明白了。我使用了
Z2如果您想避免计算两次运行长度(不必要),您可以使用
和(rle(Z%in%X),length[value])
@docendodiscimus-是的,这是一个很好的补充。我会把它包括在我的回答中。谢谢。或者只是
rle(Z)$length[rle(Z)$values='X']
rle(Z)$length[rle(Z)$values='Y']
,不?@alistaire我假设他的
Z
就是
Z哦,我明白了。我使用了
Z2如果您想避免计算两次运行长度(不必要),您可以使用
和(rle(Z%in%X),length[value])
@docendodiscimus-是的,这是一个很好的补充。我会把它包括在我的回答中。谢谢