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

标签 r

问题:

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

为了便于我对评估者间可靠性的分析,我需要能够排列由不同评估者创建的向量,并查看一致的地方;所以,虽然 "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)

我可以产生类似的东西:
expand.x <- c(NA,NA,3,NA,5,6,NA,NA)
sequence命令与我想要的有一些相似之处,但并不完全相同。

就我而言,没有必要实际保留原始向量中的值,因此
expand.x <- c(0,0,1,0,1,1,0,0)

或者
expand.x <- c(FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,FALSE,FALSE)

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

最佳答案

1) 尝试这个:

> xmin:xmax %in% x
[1] FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE FALSE

2) 或这个
> x[ match(xmin:xmax, x) ]
[1] NA NA  3 NA  5  6 NA NA

3) 或这个
> replace(xmin:xmax, -x, 0)
[1] 0 0 3 0 5 6 0 0

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

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

关于R:扩展一个序列,使得序列中任何成员的值成为它的位置,未填充的位置编码为 0 或 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20411581/

相关文章:

r 序列问题 - 给定序列中的最大变化次数

r - 优化 R 中的向量索引和矩阵创建

r - 如何替换两个栅格(矩阵)之间的值?

r - left_join 基于 R 中最近的 LAT_LON

r - 根据因子使用不同的比例作为填充

r - 在 rmd 上添加字数统计

r - klaRA 和插入符号中的朴素贝叶斯

r - 根据对象名称的字符向量创建列表

R sink() : Error, 无法拆分消息连接

R RPostgreSQL 使用 SSL 连接到远程 Postgres 数据库