r - 编码 R 中向量中元素的变化

标签 r vector

给定向量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,我们从 AABB、...、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/

相关文章:

c++ - 自定义对象的vector如何设置大小?

C++ - 如何将多个值插入一个 vector ,每个值都有不同的索引?

c++ - 映射 vector 的时间复杂度是多少?

r - R中的列绑定(bind)并命名该列

r - date_breaks {scales} 改变 ggplot 中的日期刻度

r - 将非单调数据转换为 R 中的单调数据

javascript - 使用 json 对 openlayers.vector 进行条件

r - 映射距离 : controlling for traffic

R - 在网格中排列时如何更改图像的高度

c# - 使用 Math.Net Numerics 和 C# 对两个向量的值进行数字相加