如何创建一个向量并基于另一个向量递增它?

How to create a vector and increment it based on another vector?

提问人:Andrea 提问时间:9/14/2023 最后编辑:divibisanAndrea 更新时间:9/14/2023 访问量:35

问:

假设我有以下重复字母的向量:

a = rep(LETTERS, 5)[3:130]

如下所示:

“C” “D” “E” “F” “G” “H” “I” “J” “K” “L” “M” “N” “O” “P” “Q” “R” “S” “T” “U” “V” “W” “X” “Y” “Z” “A” “B” “C” “D” “E” “F” “G” “H” “I” “J” “K” “L” “M” “N” “O” “P” “Q” “R” “S” “T” “U” “V” “W” “X” “Y” “Z” “A” “B” ...

我想创建第二个相同长度的数值向量,该向量从变量“n”开始,当 a 包含“A”(即下一个字母表)时增加 1。

n = 45

它应该看起来像这样:

45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 47 47 ...

我知道我可以通过以下内容找到这些更改的索引:

which(a == "A")

25 51 77 103

但我不确定有没有有效的方法来做到这一点。

r 增量

评论


答:

3赞 Gregor Thomas 9/14/2023 #1
a = rep(LETTERS, 5)[3:130]
n = 45
n + cumsum(a == "A")
# [1] 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46 46 46 46 46 46
# [33] 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 47 47 47 47 47 47 47
# [65] 47 47 47 47 47 47 47 47 47 47 47 47 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48
# [97] 48 48 48 48 48 48 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
1赞 TarJae 9/14/2023 #2

如果要使用:which

a = rep(LETTERS, 5)[3:130]
n = 45

indices <- which(a == "A")
result <- rep(n, length(a))

for (idx in indices) {
  result[idx:length(a)] <- result[idx:length(a)] + 1
}

result
[1] 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
 [19] 45 45 45 45 45 45 46 46 46 46 46 46 46 46 46 46 46 46
 [37] 46 46 46 46 46 46 46 46 46 46 46 46 46 46 47 47 47 47
 [55] 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
 [73] 47 47 47 47 48 48 48 48 48 48 48 48 48 48 48 48 48 48
 [91] 48 48 48 48 48 48 48 48 48 48 48 48 49 49 49 49 49 49
[109] 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
[127] 49 49