gpt4 book ai didi

r - 每次向量元素更改时在 R 中拆分向量

转载 作者:行者123 更新时间:2023-12-05 02:56:18 26 4
gpt4 key购买 nike

每当元素值发生变化时,我都需要拆分一个由重复元素组组成的向量。例如:

test_vector <- c("string1", "string1", "string1", "string2", 
"string2", "string1", "string1", "string3")

必须成为:

$`1`
[1] "string1" "string1" "string1"

$`2`
[1] "string2" "string2"

$`3`
[1] "string1" "string1"

$`4`
[1] "string3"

如果我尝试 split(test_vector, test_vector) 我会得到错误的输出:

$string1
[1] "string1" "string1" "string1" "string1" "string1"

$string2
[1] "string2" "string2"

$string3
[1] "string3"

我写了一些实现此目的的代码,但它似乎不必要地长而且我觉得我遗漏了一些更简单的东西:

# find indices where splitting will occur:
split_points <- rep(F, length(test_vector))
for (i in 1:length(test_vector)) {
if (i != 1) {
if (test_vector[i] != test_vector[i-1]) {
split_points[i] <- T
}
}
}
split_points <- c(1, which(split_points))

# create split vector:
split_code <- rep(1, length(test_vector))
for ( j in 1:length(split_points) ) {

if (j!=length(split_points)) {
split_code[
split_points[j]:(split_points[j+1]-1)
] <- j
} else {
split_code[
split_points[j]:length(test_vector)
] <- j
}

}

split_result <- split(test_vector, split_code)
$`1`
[1] "string1" "string1" "string1"

$`2`
[1] "string2" "string2"

$`3`
[1] "string1" "string1"

$`4`
[1] "string3"

如果有人能帮我找到一个更简单的解决方案,我将不胜感激!

最佳答案

base R中,我们可以使用rle获取向量的游程编码

grp <- with(rle(test_vector), rep(seq_along(values), lengths))

使用它来拆分 vector

split(test_vector, grp)

data.tablerleid根据相邻元素的不同给出id

library(data.table)
split(test_vector, rleid(test_vector))

关于r - 每次向量元素更改时在 R 中拆分向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60608723/

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