将向量的接近相同的数字分组
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"
我有以下向量:
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"