ベクトルをリストに分割して、すべての連続する一意の値を1つのグループに入れる方法があるかどうかを確認しようとしています。連続した一意の値に基づいてベクトルをリストに分割する方法
この方法は、x
も文字であるときに機能することに注意してください。ここで
#DATA
x = c(0, 0, 0, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 7, 7, 7, 7)
x
#[1] 0 0 0 7 7 7 7 0 0 0 0 0 0 0 7 7 7 7
#DESIRED OUTPUT
L = list(c(0, 0, 0), c(7, 7, 7, 7), c(0, 0, 0, 0, 0, 0, 0), c(7, 7, 7, 7))
L
#[[1]]
#[1] 0 0 0
#[[2]]
#[1] 7 7 7 7
#[[3]]
#[1] 0 0 0 0 0 0 0
#[[4]]
#[1] 7 7 7 7
#CURRENT APPROACH
split_vector = 0
for (i in 2:length(x)){
split_vector[i] = ifelse(x[i] != x[i-1], max(split_vector) + 1, split_vector[i-1])
}
split(x, split_vector)
#$`0`
#[1] 0 0 0
#$`1`
#[1] 7 7 7 7
#$`2`
#[1] 0 0 0 0 0 0 0
#$`3`
#[1] 7 7 7 7
。文字については、 'tapply(x、cumsum(c、TRUE、diff)as.numeric(as.factor(x)))!= 0))、I)'が動作します。 –
更新されたものを見てください。 – JasonWang