压缩向量(与rep相反)

压缩向量(与rep相反),r,R,我需要把一个向量分解成一系列的x,然后重复,我不确定这是什么。它与rep功能相反。所以是向量 [1,2,2,2,2,1,1,1,1,1,2,2] -> [1x1, 4x2, 5x1, 2x2] 我写了一个小函数来实现这一点,但我确信一定有一种更为自然的方式: invrep <- function(y){ numy <- as.numeric(y); newpoints <- which(c(T,diff(numy) != 0)); x <- y[new

我需要把一个向量分解成一系列的x,然后重复,我不确定这是什么。它与
rep
功能相反。所以是向量

[1,2,2,2,2,1,1,1,1,1,2,2] -> [1x1, 4x2, 5x1, 2x2]
我写了一个小函数来实现这一点,但我确信一定有一种更为自然的方式:

invrep <- function(y){
  numy <- as.numeric(y);
  newpoints <- which(c(T,diff(numy) != 0));
  x <- y[newpoints];
  times <- diff(c(newpoints, length(numy)+1));
  return(list(x=x, times=times));
}

myvec <- factor(floor(runif(50,0,3)), levels=0:2, labels=c("blue", "yellow", "red"));
myrep <- invrep(myvec);
identical(myvec, rep(myrep$x, myrep$times));

invreprle
函数应该可以实现以下功能:

> x <- c(1,2,2,2,2,1,1,1,1,1,2,2)
> y <- rle(x)
> y
Run Length Encoding
  lengths: int [1:4] 1 4 5 2
  values : num [1:4] 1 2 1 2
> inverse.rle(y)
 [1] 1 2 2 2 2 1 1 1 1 1 2 2
> rep(y$values, y$lengths)
 [1] 1 2 2 2 2 1 1 1 1 1 2 2

sort
+
rle
?或者只是
表格
?我不太明白,当乔兰打败了我。Joran你可能应该给出这个答案,因为我猜它是最好的或最好的。@Joran它只是简单的
rle
,没有任何
排序
啊,我现在明白了。看来汤米把你掩护起来了,谢谢
rle
确实是我想要的。如果你不知道要搜索哪个词,很难找到:-)要处理因子向量,我必须将它转换为字符,如:
rle(as.character(myvec))
+1,如果可以的话,它应该是+2,因为我不知道如何使用
inverse.rle
myvec <- factor(sample.int(3,50,TRUE), levels=1:3, labels=c("blue", "yellow", "red"))
x <- rle(as.character(myvec))
y <- inverse.rle(x)