zx8*_*754 8 r run-length-encoding
看起来像一个简单的任务,无法弄清楚一个更简单的方法.我在x下面有一个向量,需要为连续值创建组名.我的尝试是使用rle更好的想法?
# data
x <- c(1,1,1,2,2,2,3,2,2,1,1)
# make groups
rep(paste0("Group_", 1:length(rle(x)$lengths)), rle(x)$lengths)
# [1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4"
# [9] "Group_4" "Group_5" "Group_5"
Run Code Online (Sandbox Code Playgroud)
Sot*_*tos 11
使用rleid来自data.table,
library(data.table)
paste0('Group_', rleid(x))
#[1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4" "Group_4" "Group_5" "Group_5"
Run Code Online (Sandbox Code Playgroud)
使用diff和cumsum:
paste0("Group_", cumsum(c(1, diff(x) != 0)))
#[1] "Group_1" "Group_1" "Group_1" "Group_2" "Group_2" "Group_2" "Group_3" "Group_4" "Group_4" "Group_5" "Group_5"
Run Code Online (Sandbox Code Playgroud)
(如果您的值是浮点值,则可能必须避免!=使用容差.)