将向量的接近相同的数字分组

Group the near same numbers of a vector

我有以下向量:

c("a", "a", "b", "a", "a", "c", "c", "c")

我想把它的元素按照接近相同的值分成几组。 结果是这样的:

[[1]] ("a", "a"), [[2]]("b"), [[3]]("a", "a"), [[4]]("c", "c", "c")

组1和组3虽然元素相同,但不是邻居。所以他们属于不同的群体。 我尝试使用for循环来做,但它还不够好。

使用此代码

vec <- c("a", "a", "b", "a", "a", "c", "c", "c")

v2 <- rle(vec)

split(vec,rep(1:length(v2$lengths), v2$lengths)) 

$`1`
[1] "a" "a"

$`2`
[1] "b"

$`3`
[1] "a" "a"

$`4`
[1] "c" "c" "c"

另一个选项,但是 rleid 来自 data.table

> split(v,rleid(v))
$`1`
[1] "a" "a"

$`2`
[1] "b"

$`3`
[1] "a" "a"

$`4`
[1] "c" "c" "c"

或另一个基础 R 选项

> split(v,cumsum(c(TRUE,head(v,-1)!=v[-1])))
$`1`
[1] "a" "a"

$`2`
[1] "b"

$`3`
[1] "a" "a"

$`4`
[1] "c" "c" "c"