我有以下数据:
orig.vec <- c(1:10)
idx <- c(3,5,6)
rep.vec <- list(c(7,7,7), c(8,8,8), c(9,9,9))
1号 我怎样才能插入的元素rep.vec
到orig.vec
在位置包含在idx
和移orig.vec
值到左/右?
所需结果:
orig.vec
右移: 1,2,7,7,7,3,4,8,8,8,5,9,9,9,6,7,8,9,10
orig.vec
向左移动: 1,2,3,7,7,7,4,5,8,8,8,6,9,9,9,7,8,9,10
2号 如何替换元素中orig.vec
包含的atidx
元素rep.vec
?
所需结果:
1,2,7,7,7,4,8,8,8,9,9,9,7,8,9,10
orig.vec <- c(1:10)
idx <- c(3,5,6)
rep.vec <- list(c(7,7,7), c(8,8,8), c(9,9,9))
left <- Map('c', idx, rep.vec)
right <- Map('c', rep.vec, idx)
repl <- rep.vec
l <- as.list(orig.vec)
l[idx] <- left
l[idx] <- right
l[idx] <- repl
unlist(l)
## left
# [1] 1 2 3 7 7 7 4 5 8 8 8 6 9 9 9 7 8 9 10
## right
# [1] 1 2 7 7 7 3 4 8 8 8 5 9 9 9 6 7 8 9 10
## repl
# [1] 1 2 7 7 7 4 8 8 8 9 9 9 7 8 9 10
编辑:作为一个功能
insert <- function(x, index, replacement, how = c('replace','left','right')) {
how <- match.arg(how)
repl <- switch (how,
replace = replacement,
left = Map('c', index, replacement),
right = Map('c', replacement, index)
)
x[index] <- repl
unlist(x)
}
sapply(c('replace','left','right'), insert,
x = orig.vec, index = idx, replacement = rep.vec)
# $replace
# [1] 1 2 7 7 7 4 8 8 8 9 9 9 7 8 9 10
#
# $left
# [1] 1 2 3 7 7 7 4 5 8 8 8 6 9 9 9 7 8 9 10
#
# $right
# [1] 1 2 7 7 7 3 4 8 8 8 5 9 9 9 6 7 8 9 10
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句