ベクトルを一連の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));