使用 R 替换向量中的特定数字序列

Substitute a specific numeric sequence within a vector using R

如何识别 A 中的特定序列(即 1,1,0,0 和 0,0,1,1)并将这些数字替换为 1, 0.7, 0.3,0 和 0, 0.3, 0.7 , 1, 分别是 (A2)?

简而言之,转换为:

A<-c(1,1,1,1,0,0,0,0,1,1,1,1)

进入这个:

A2<-c(1,1,1,0.7,0.3,0,0,0.3,0.7,1,1,1)

我有一个很长的数据集,所以无法手动平滑它。

谢谢!

您可以将 sliderreplace 结合使用:

library(slider)

A <- c(1,1,1,1,0,0,0,0,1,1,1,1)

replace.pattern <- function(x,pattern,replacement) {
  idx <- which(unlist(slide(x, .f=function(x) {identical(x,pattern)},.after = length(pattern)-1)))
  idx <- unlist(lapply(idx, function(i) i:(i+length(pattern)-1)))
  replace(x,idx,replacement)
}

A <- replace.pattern(A, c(1,1,0,0), c(1, 0.7, 0.3,0))
A <- replace.pattern(A, c(0,0,1,1), c(0, 0.3, 0.7, 1))

A
#>  [1] 1.0 1.0 1.0 0.7 0.3 0.0 0.0 0.3 0.7 1.0 1.0 1.0