r - 根据整数向量中数字的顺序出现创建一组指标
问题描述
假设我有一个整数向量
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
推荐阅读
- django - ValueError - 'image' 属性没有与之关联的文件。模板渲染期间出错
- python - 由于模块“datetime”没有属性“fromisoformat”,Convrt daetime stom 时间戳失败
- ios - FCM 令牌不唯一
- python - Python Pandas Regex:在列中搜索带有通配符的字符串并返回匹配项
- java - 在一个简单的 Producer-Consumer 实现中混淆了 synchronized、wait、notifyAll
- node.js - 如何使用 Sequelize 包含多个其他表?
- coldfusion - 在 Application.cfc 上未提及应用程序名称的 ColdFusion 应用程序
- c - 更正 sys_uname 的内联汇编代码
- python - 时间应该在Python中的录音中动态变化
- python - 如何使用 Python 删除特定单词之前的所有单词(如果有多个特定单词)?