复制由其他向量确定的向量中的某些值

sds*_*sds 3 double r vector repeat replicate

我有一个值向量(比如说1:10),并希望在其中重复某些值2次或更多次,由另一个向量(比方说c(3,4,6,8))确定.在此示例中,结果将是c(1,2,3,3,4,4,5,6,6,7,8,8,9,10)重复2次.

这适用于任意长度范围向量(如200:600),第一个包含第二个向量.有没有方便的方法来实现这一目标?

lmo*_*lmo 6

Akrun是一种更紧凑的方法,但这也可行

# get rep vector
reps <- rep(1L, 10L)
reps[c(3,4,6,8)] <- 2L

rep(1:10, reps)
 [1]  1  2  3  3  4  4  5  6  6  7  8  8  9 10
Run Code Online (Sandbox Code Playgroud)

这里的见解是,rep第二个参数中的整数向量与第一个参数的长度相同,第一个参数表示第一个参数的每个元素的重复次数.

请注意,此解决方案依赖于假设,c(3,4,6,8)即要重复的元素的索引或位置.在这种情况下,db的评论有一个单行

rep(x, (seq_along(x) %in% c(3,4,6,8)) + 1)
Run Code Online (Sandbox Code Playgroud)

如果相反,c(3,4,6,8)表示要重复的值,那么docendo-discimus的超紧凑代码,

rep(x, (x %in% c(3,4,6,8)) * (n-1) +1)
Run Code Online (Sandbox Code Playgroud)

其中n可以调整以改变重复次数.如果您需要多次调用它,可以将其汇总到类似函数中

myReps <- function(x, y, n) rep(x, (x %in% y) * (n-1) +1)
Run Code Online (Sandbox Code Playgroud)

并称为

myReps(1:10, c(3,4,6,8), 2)
Run Code Online (Sandbox Code Playgroud)

在当前的情况下.