给定向量vec
:
[1] 1 1 1 1 1 0 2 0 0 0 1 1 3 0
我想要另一个向量来编码 vec
中元素的变化。我想要这样的结果:
[1] "A" "A" "A" "A" "A" "B" "C" "D" "D" "D" "E" "E" "F" "G"
如果我们到达 Z
,我们从 AA
、BB
、...、ZZ
开始, AAA
, BBB
, ... 等等。
最佳答案
我们可以使用 data.table
中的 rleid
library(data.table)
z1[rleid(vec)]
#[1] "A" "A" "A" "A" "A" "B" "C" "D" "D" "D" "E" "E" "F" "G"
或者用'z2'
z2[rleid(vec)]
#[1] "A" "A" "A" "A" "A" "B" "C" "D" "D" "D" "E" "E" "F" "G"
或者使用base R
z1[cumsum(c(TRUE, diff(vec)!=0))]
#[1] "A" "A" "A" "A" "A" "B" "C" "D" "D" "D" "E" "E" "F" "G"
z1[inverse.rle(within.list(rle(vec), values <- seq_along(values)))]
数据
vec <- c(1, 1, 1, 1, 1, 0, 2, 0, 0, 0, 1, 1, 3, 0)
z1 <- unlist(sapply(1:3, function(i) do.call(paste0,
expand.grid(rep(list(LETTERS), i)))))
z2 <- c(sapply(1:3, function(i) do.call(paste0, replicate(i,
LETTERS, simplify=FALSE))))
关于r - 编码 R 中向量中元素的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037555/