使用 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)
我有一个很长的数据集,所以无法手动平滑它。
谢谢!
您可以将 slider
与 replace
结合使用:
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
如何识别 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)
我有一个很长的数据集,所以无法手动平滑它。
谢谢!
您可以将 slider
与 replace
结合使用:
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