我很好奇在R中是否有一种分解连续群向量的泛函方法。
例如,如果我有以下内容
# start with this
vec <- c(1,2,3,4,6,7,8,30,31,32)
# end with this
vec_vec <- list(c(1, 2, 3, 4),c(6,7,8),c(30,31,32))
print(vec_vec[1])
我只能通过一个for循环来想象这一点,在这个循环中,我可以计算以前值的差异,但是也许有更好的方法来解决这个问题。
发布于 2022-08-10 06:50:20
split(vec, vec - seq_along(vec)) |> unname()
# [[1]]
# [1] 1 2 3 4
#
# [[2]]
# [1] 6 7 8
#
# [[3]]
# [1] 30 31 32
减法seq_along(vec)
将连续序列转化为单个值,我们可以通过它来实现split
。
发布于 2022-08-10 06:53:53
1)折叠包中有seqid:
library(collapse)
split(vec, seqid(vec))
给予:
$`1`
[1] 1 2 3 4
$`2`
[1] 6 7 8
$`3`
[1] 30 31 32
2)给出相同答案的基本方法是
split(vec, cumsum(c(TRUE, diff(vec) != 1)))
3)建议在cgwtools中的注释seqle
中使用。
library(cgwtools)
lens <- seqle(vec)$lengths
split(vec, rep(seq_along(lens), lens))
https://stackoverflow.com/questions/73308307
复制