R:扩展序列,使序列中任何成员的值成为其位置,未填充的位置编码为0或NA

A J*_*ack 5 r

问题:

我有一个数据集,其中评估者列出了他们认为是噪声而不是信号的组件.因此,如果总共有八个组件,他们可能会生成一个类似"3,5,6"的列表,表明他们认为第三,第五和第六个组件是噪音,应该从进一步分析中排除.

为了便于我对interrater可靠性的分析,我需要能够对不同评估者创建的向量进行排列,并查看协议的位置; 所以,虽然"3,5,6"和"3,6"没有可比性,但像"0,0,3,0,5,6,0,0"和"0,0,3,0,0" ,6,0,0"将是,特别是一旦我将所有非零值转换为1.

我想知道是否有办法将序列从指定的最小值扩展到指定的最大值,用"0"或"NA"替换缺失值,这样给定:

xmin <- 1
xmax <- 8
x <- c(3,5,6)
Run Code Online (Sandbox Code Playgroud)

我可以产生类似的东西:

expand.x <- c(NA,NA,3,NA,5,6,NA,NA)
Run Code Online (Sandbox Code Playgroud)

sequence命令与我想要的有一些相似之处,但并不完全相同.

就我的目的而言,没有必要实际保留原始向量中的值,所以

expand.x <- c(0,0,1,0,1,1,0,0)
Run Code Online (Sandbox Code Playgroud)

要么

expand.x <- c(FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE)
Run Code Online (Sandbox Code Playgroud)

对我来说同样适用,因为在这种格式中,位置数据概括了列表中的原始数值.我觉得这应该很简单,但我不确定从哪里开始解决这个问题.我怀疑将给定的矢量c(3,5,6)与完整序列进行比较的某种方式seq(xmin:xmax)是关键但是......没有想法.谢谢!

G. *_*eck 8

1)试试这个:

> xmin:xmax %in% x
[1] FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

2)或者这个

> x[ match(xmin:xmax, x) ]
[1] NA NA  3 NA  5  6 NA NA
Run Code Online (Sandbox Code Playgroud)

3)或者这个

> replace(xmin:xmax, -x, 0)
[1] 0 0 3 0 5 6 0 0
Run Code Online (Sandbox Code Playgroud)

如果我们替换0NA那么该解决方案给出与(2)相同的结果.

编辑:添加第二个解决方案.