gpt4 book ai didi

R 将数字向量转换为跳过索引

转载 作者:行者123 更新时间:2023-12-04 19:08:19 24 4
gpt4 key购买 nike

我有一个宽度向量,

ws = c(1,1,2,1,3,1)

从这个向量我想有另一个这种形式的向量:
indexes = c(1,2,3,5,6,7,9,11,12)

为了创建这样的向量,我在 R 中执行了以下 for 循环:
ws = c(1,1,2,1,3,1)
indexes = rep(0, sum(ws))
counter = 1
counter2 = 1
last = 0
for(i in 1:length(ws))
{
if (ws[i] == 1)
{
indexes[counter] = counter2
counter = counter + 1
} else {
for(j in 1:ws[i])
{
indexes[counter] = counter2
counter = counter + 1
counter2 = counter2+2
}
counter2 = counter2 - 2
}
counter2 = counter2+1
}

逻辑如下,ws中的每个元素指定index中各自的元素个数。例如,如果 ws 为 1,则索引中相应的元素数为 1,但如果 ws > 1,我们说 3,则索引中相应的元素数为 3,并且元素被 1×1 跳过,对应于 3、5、7。

但是,我想避免使用 for 循环,因为它们在 R 中往往很慢。您对如何仅使用向量运算实现此类结果有什么建议吗?或者一些更疯狂的解决方案?

谢谢!

最佳答案

这是为您准备的矢量化单线:

ws <- c(1,1,2,1,3,1)

cumsum((unlist(sapply(ws, seq_len)) > 1) + 1)
# [1] 1 2 3 5 6 7 9 11 12

你可以一块一块地把它拆开,从里到外,看看它是如何工作的。

关于R 将数字向量转换为跳过索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991855/

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