Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用R改变给定位置和条件的向量中的值_R_Vector - Fatal编程技术网

使用R改变给定位置和条件的向量中的值

使用R改变给定位置和条件的向量中的值,r,vector,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 第二部分我可以做的是: replace(stack,which(stack == 1),0) 但我不知道如何有效地做第一个。任何帮助都将不胜感激。这里有一个可能的base R选项 temp <- which(stack

我在处理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
第二部分我可以做的是:

replace(stack,which(stack == 1),0)

但我不知道如何有效地做第一个。任何帮助都将不胜感激。

这里有一个可能的base 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

temp我会选择正则表达式

stack <- paste0(stack, collapse="")
stack <- gsub("1.{3}", "0111", stack)
stack <- strsplit(stack, "+")

stack您可以在此处使用
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

当原始列表中有两个一个接一个的时候会发生什么?在我的长向量中不会发生这种情况,但是对于这个问题,我想。。。谢谢真的很喜欢汉克!我的例子就是这样。然而,我正努力尝试通过dplyr将其应用到一个组中。我得到的参数意味着不同的行数:9830,13。我试着改变括号,但似乎没有任何效果。如果你有任何想法,请告诉我。我在这方面有错误。对于类为“c('double',numeric')”@bmk759的对象,没有适用的“filter_u2;”方法-看起来dplyr正在干扰基本R
?stats::filter
。双重显式地说,如果像我一样,您通常“总是”加载dplyr,那么这里有一个可靠的方法覆盖它:mav
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