【发布时间】:2020-07-05 10:53:18
【问题描述】:
我需要根据另一个向量中相同位置的值来更改一个向量中的某些值。以下是我的向量:
r <- (1:20)
a <- c(54,54,54,54,55,55,50,0,0,0,0,0,0,1,1,1,1,1,56,57)
基本上,如果 'a' 中的任何值大于或等于且小于 20(因此 a 中的任何值是 0-20),我想将 'r' 中的值更改为自身 -1 .如果 'a' 中的值大于 20 或小于 0,那么我希望它在 'r' 中的值保持不变。因此,对于“a”中的第 8 个点,该值为 0,大于/等于 0 且小于 20,所以我希望“r”中的第 8 个点(值为 8)减去 1(所以现在它的值将是 7)。但是对于“a”中的第一个点,该值为 54,大于 20,因此 r 中的第一个值将保持不变。我以为我需要为此编写一个 for 循环,我开始这样做,但它没有做我需要它做的事情。这是我目前所拥有的。
for(i in a){
if (i >= 0 && i < 20){
r[i] = r[i]-1
} else {
r[i] = r[i]
}
}
当我运行这段代码时,它会返回 r
[1] -4 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 NA NA NA NA NA NA NA NA NA NA NA
[32] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
我怎样才能让它返回如下所示的正确结果:
[1] 1 2 3 4 5 6 7 7 8 9 10 11 12 13 14 15 16 17 19 20
谢谢!
【问题讨论】:
-
感谢到目前为止回答的人!我也刚刚意识到一个潜在的问题。这些向量只是我目前实际使用的数据的 sn-ps。 'r' 向量实际上是一天中的一个小时(所以 0 到 23 重复,这里和那里缺少一些小时)并且重复大约 3 个月。例如,如果将此代码用于 0 小时,则从中减去 1 会使小时为 -1,但我希望它是 23 小时或之前的任何小时数。您在下面发布的解决方案仍然适用吗?请告诉我,谢谢。
标签: r for-loop if-statement iteration