使用一个向量中的值更改R(for循环)中另一个向量中的值

使用一个向量中的值更改R(for循环)中另一个向量中的值,r,for-loop,if-statement,iteration,R,For Loop,If Statement,Iteration,我需要改变一个向量中的某些值,这取决于另一个向量中相同位置的值。下面是我的向量: 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) 我如何让它返回正确的结果,应该是这样的: [1] 1 2 3 4 5 6 7 7 8 9 10 11 12 13 14 15 16 17 19 20 谢谢大家! 我们可以在序列中循环 for(i in seq_along(a)) if(a[i] >=0 &a

我需要改变一个向量中的某些值,这取决于另一个向量中相同位置的值。下面是我的向量:

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)
我如何让它返回正确的结果,应该是这样的:

[1] 1 2 3 4 5 6 7 7 8 9 10 11 12 13 14 15 16 17 19 20

谢谢大家!

我们可以在序列中循环

for(i in seq_along(a)) if(a[i] >=0 && a[i] < 20) r[i] <- r[i] -1 
r
#[1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20

由于r[54]不存在,因此不使用“a”的值,而在该元素上赋值会导致NA

我们可以在序列中循环

for(i in seq_along(a)) if(a[i] >=0 && a[i] < 20) r[i] <- r[i] -1 
r
#[1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20
因为r[54]不存在,所以不使用“a”的值,而在该元素上赋值会导致NA

也许这会有所帮助

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)

r[a >= 0 & a < 20] <- r[a >= 0 & a < 20] - 1

# [1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20
这里不需要循环,上面的答案是最有效的。

也许这会有帮助

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)

r[a >= 0 & a < 20] <- r[a >= 0 & a < 20] - 1

# [1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20

这里不需要循环,上面的答案是最有效的。

我想一个紧凑的基本R解决方案是使用ifelse

> ifelse(a>=0 & a< 20,r-1,r)
 [1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20

我想一个紧凑的基本R解决方案是使用ifelse

> ifelse(a>=0 & a< 20,r-1,r)
 [1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20
你可以做:

r - (a >= 0 & a < 20) 

[1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20
你可以做:

r - (a >= 0 & a < 20) 

[1]  1  2  3  4  5  6  7  7  8  9 10 11 12 13 14 15 16 17 19 20

感谢到目前为止回答问题的人!我也刚刚意识到一个潜在的问题。这些向量只是我目前实际处理的数据片段r'向量实际上是一天中的一个小时,所以0到23个小时重复,有些小时在这里或那里缺失,重复大约3个月。例如,如果将此代码用于小时0,则从中减去1将使小时为-1,但我希望它是小时23或之前的任何小时数。您在下面发布的解决方案是否仍然适用?请让我知道,谢谢你。谢谢你到目前为止的回答!我也刚刚意识到一个潜在的问题。这些向量只是我目前实际处理的数据片段r'向量实际上是一天中的一个小时,所以0到23个小时重复,有些小时在这里或那里缺失,重复大约3个月。例如,如果将此代码用于小时0,则从中减去1将使小时为-1,但我希望它是小时23或之前的任何小时数。您在下面发布的解决方案是否仍然适用?请让我知道,谢谢。