假设我有一个整数向量
x <- c(10, 1, 1, 4, 10, 10, 7, 7, 7)
我想基于此向量创建两组指标。对于其他向量y
,第一个指示符的1
长度应等于x == 10
,然后等于零。重要的是,它必须忽略10
向量中稍后发现的任何其他内容。例如,x
上面给出的是
y <- c(1, 0, 0, 0, 0, 0, 0, 0, 0)
而如果
x <- c(10, 10, 10, 1, 1, 5, 10, 7, 9)
然后
y <- c(1, 1, 1, 0, 0, 0, 0, 0, 0)
第二个指示符z
应等于1
序列结束后的第一个元素。给定上述x
向量,我希望输出为:
z <- c(0, 1, 0, 0, 0, 0, 0, 0, 0)
z <- c(0, 0, 0, 1, 0, 0, 0, 0, 0)
使用一个向量算出另一个向量就很好了。鉴于用于计算序列的数字可能会在向量的后面出现,所以我还没有找到一种解决此问题的灵巧方法,因此对我而言,简单的相等性检查不起作用。
rle
通过将那些“值”分配给FALSE,我们可以用来将不等于第一组10的值更改为0
+(inverse.rle(within.list(rle(x == 10), values[seq_along(values) > 1] <- FALSE)))
#[1] 1 0 0 0 0 0 0 0 0
+(inverse.rle(within.list(rle(x == 10), values[seq_along(values) > 1] <- FALSE)))
#[1] 1 1 1 0 0 0 0 0 0
对于第二种情况,使用来获取位置which
并使用来创建逻辑向量%in%
library(data.table)
+( seq_along(x) %in% which(rleid(x == 10) > 1)[1])
#[1] 0 1 0 0 0 0 0 0 0
+( seq_along(x) %in% which(rleid(x == 10) > 1)[1])
#[1] 0 0 0 1 0 0 0 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句