gpt4 book ai didi

r - 将向量拆分为相等值的连续运行

转载 作者:行者123 更新时间:2023-12-05 00:21:47 24 4
gpt4 key购买 nike

我有一个数据表,其中一列是一堆 0 和 1,就像 vec以下。

vec = c(rep(1, times = 6), rep(0, times = 10), rep(1, times = 11), rep(0, times = 4))

> vec
[1] 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0

我想要做的是每次在该列从 0 到 1 或反之亦然发生变化时拆分数据。这是我到目前为止所做的:
b = c(vec[1],diff(vec))

rowby = numeric(0)
for (i in 2:(length(b))) {
if (b[i] != 0) {
rowby <- c(rowby, i-1)
}
}
splitted_data <- split(vec, cumsum(c(TRUE,(1:length(vec) %in% rowby)[-length(vec)])))

我 Nose 底下一定有什么我看不见的东西。这样做的正确方法是什么?这适用于上面的示例,但不是一般的。

最佳答案

尝试

 split(vec,cumsum(c(1, abs(diff(vec)))))
#$`1`
#[1] 1 1 1 1 1 1

#$`2`
#[1] 0 0 0 0 0 0 0 0 0 0

#$`3`
#[1] 1 1 1 1 1 1 1 1 1 1 1

#$`4`
#[1] 0 0 0 0

或使用 rle
 split(vec,inverse.rle(within.list(rle(vec), values <- seq_along(values))))

使用当前版本的 data.table , rleid是可用于这项工作的一个功能:
 library(data.table)#v1.9.5+
split(vec,rleid(vec))

关于r - 将向量拆分为相等值的连续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31003568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com