r - 从序列创建组
问题描述
如何创建一个“组”向量来识别另一个向量中相同值的序列。
由此
x <- c(0,1,0,0,1,0,1)
我想创建这个
outcome <- c(1,2,3,3,4,5,6)
[1] 0 1 0 0 1 0 1
[1] 1 2 3 3 4 5 6
因此,只要有一个新的相同值序列,就会有一个新的组号(或者也可以是一个数字以外的东西)。
我实际上会知道到达那里的方法,但它们都很可怕。我能想到的最好的是
comparison <- x != lag(x)
cumsum(replace_na(comparison, TRUE))
但就像我说的 - 可怕。必须有更好的方法,我希望有人知道。
解决方案
我们可以rleid
使用data.table
library(data.table)
rleid(x)
#[1] 1 2 3 3 4 5 6
或base R
与rle
with(rle(x), rep(seq_along(values), lengths))
#[1] 1 2 3 3 4 5 6
或者,如果我们使用 OP 中的类似方法
1 + cumsum(x != dplyr::lag(x, default = first(x)))
推荐阅读
- python-3.x - python中set、list、SortedSet等容器的通用超类
- sql - SQL 查询的 HAVING 子句能否仅使用聚合函数?
- arduino - 在 ESP32 上使用 ASyncUDP 将 packet.data() 保存为字符串
- facebook-graph-api - Graph API 不为某些用户返回电子邮件
- javascript - 如果解析中的字段为空,为什么键不存在?
- htmlpurifier - htmlpurifier nofollow 仅适用于生成的链接
- python - 如何将 sklearn 管道存储在字典中?
- typescript - 打字稿从省略类型重建原始类型
- grails - Grails 获取可用数据源列表
- python - 如何将带有逗号整数的字符数字列表转换为整数列表?