使用R给出位置和条件,从而改变向量中的值

itj*_*s18 3 r vector

我在操纵R中的向量时遇到了麻烦.我有一个看起来像这样的向量:

stack <- append(append(rep(0,8),c(1,0,0,0,0,1)),rep(0,6))
[1] 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

我的总体目标是操纵矢量:

*当有1时,在向量1中创建接下来的三个值.*将原始1更改为0.

所以最终矢量看起来像:

[1] 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0
Run Code Online (Sandbox Code Playgroud)

第二部分我可以做到:

replace(stack,which(stack == 1),0)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何有效地完成第一个.任何帮助将不胜感激.

Dav*_*urg 5

这是一个可能的基本R选项

temp <- which(stack == 1)
stack[as.vector(mapply(`:`, temp, temp + 3))] <- c(0, rep(1, 3))
stack
# [1] 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0
Run Code Online (Sandbox Code Playgroud)


ags*_*udy 5

你可以filter在这里使用:

c(filter(sx,c(0,0,0,0,1,1,1),circular=TRUE))
## [1] 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0
Run Code Online (Sandbox Code Playgroud)

  • @ bmk759 - 看起来dplyr干扰了基础R`?stats :: filter`. (2认同)