【问题标题】:How to add elements to a vector based on another vector position wise in R如何根据R中的另一个向量位置向向量添加元素
【发布时间】:2020-10-18 17:02:51
【问题描述】:

我有一个长度为 192 的正整数值向量 C。我想根据这个向量 C 生成另一个向量。要创建的新向量称为 B(与 C 长度相同)。创建的算法是:

每当在 C 中观察到大于 0 的值时,将相同的值添加回向量 B 中的 12 个位置。例如,如果 C 的前 15 个条目为 0,第 16 个条目为 3,那么我想添加值 3,向量 B 中向后 12 个位置(即 16-12=位置 4)。向量 B 将以这种方式在 C 的所有值上生成。

任何帮助将不胜感激!向量 C 可以通过 R 库“爆发”获得,该包中的数据文件是 ebola_kikwit_1995$onset。

【问题讨论】:

  • 你尝试了什么?创建 for-loop 和 if-statement 是一个好的开始。请说明你卡在哪里了。
  • 如果您向我们展示您的尝试以及您遇到的问题,效果最好。只有这样,我们才能真正帮助您。此外,为了帮助您,如果您向我们提供您使用 R 代码创建的样本向量 B 和 C 并另外向我们提供您期望从算法中得到的答案,那将会很有帮助。

标签: r loops vector


【解决方案1】:

这似乎不是很棘手。一个索引向量和一个for 循环将满足问题的要求。

library("outbreaks")

i <- which(ebola_kikwit_1995$onset > 0)
i <- i[i > 12]

ebola_kikwit_1995$B <- 0L
for(j in i){
  ebola_kikwit_1995$B[j] <- ebola_kikwit_1995$onset[j] + ebola_kikwit_1995$B[j - 12]
}

ebola_kikwit_1995$B
#  [1]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
# [28]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
# [55]  0  0  0  0  0  1  1  1  0  0  0  0  3  0  0  0  1  2  0  2  0  2  0  1  0  0  0
# [82]  0  0  0  0  4  0  3  1  3  1  0  1  1  1  1  1  5  3  0  5  7  2  2  5  3  2  8
#[109]  5  9  5  4 10 10 13 14 20 10  9 16  7 14 13 10 18 13 17 21 31 13 21 21 15 17 16
#[136] 18 22 18 18 24 35 16 22 23 18 18 19 21 26 21 23 26 37 17  0 25  0  0 21  0  0  0
#[163] 25 28  0 18  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  0
#[190]  0  0  0

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多