我在操纵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)
但我无法弄清楚如何有效地完成第一个.任何帮助将不胜感激.
这是一个可能的基本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)
你可以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)