R 按顺序每隔n次重复第n个元素

R 按顺序每隔n次重复第n个元素,r,vector,insert,R,Vector,Insert,原始向量x: x = 1:20 我寻找的是一个向量,它每隔n个重复x中的第n个元素,例如,当n=4时: n = 4 y = c(1,2,3,4,4,5,6,7,8,8,9,10,11,12,12,13,14,15,16,16,17,18,19,20,20) 我实际上是为矩阵做的,我认为这与这里使用apply有关,当margin=2时,但无法立即计算出来, 谁能给我一个快速的解决方案吗?事实上,矩阵是一种可行的方法 duplast = function(M) rbind(M, M[nrow(M

原始向量
x

x = 1:20
我寻找的是一个向量,它每隔n个重复x中的第n个元素,例如,当n=4时:

n = 4
y = c(1,2,3,4,4,5,6,7,8,8,9,10,11,12,12,13,14,15,16,16,17,18,19,20,20)
我实际上是为矩阵做的,我认为这与这里使用
apply
有关,当
margin=2
时,但无法立即计算出来,
谁能给我一个快速的解决方案吗?

事实上,矩阵是一种可行的方法

duplast = function(M) rbind(M, M[nrow(M), ])
c(duplast(matrix(x, nrow = 4L)))
#  [1]  1  2  3  4  4  5  6  7  8  8  9 10 11 12 12 13 14 15 16 16 17 18 19 20
# [25] 20
如果要使用
应用

c(apply(matrix(x, nrow = 4L), 2L, function(C) c(C, C[length(C)])))
我们也可以使用

v1 <- rep(1, length(x))
v1[c(FALSE, FALSE, FALSE, TRUE)] <- 2
rep(x, v1)
#[1]  1  2  3  4  4  5  6  7  8  8  9 10 11 12 12 13 14 15 16 16 17 18 19 20 20
或者在一行中加上
ifelse
(摘自@JonathanCarroll的评论)


x@alistaire很好,但要明确的是,只有当
x
本身sorted@MichaelChirico
x@alistaire假设我们想重复
y=sample(20)
的每四个元素。您的方法可以用作索引:
y[sort(…)]
Ah,
x[sort(c(seq_沿着(x),seq(4,长度(x),4))]
。更好,好方法!我会使用
v1[seq_-along(v1)%%4L==0L]=2
,因为这更易于扩展(对于一般
n
),或者避免创建需要存储/更新的东西:
rep(x,ifelse(seq_-along(x)%%n,1,2))
@JonathanCarroll跳过slow
ifelse
(seq_-along(x)%%n==0)+1L
取决于问题速度的多少,但是的;这很好(在可读性方面的成本很小)。或者去meta-
rep
-
rep(x,rep(rep(1:2,c(n-1,1)),天花板(长度(x)/n))
v1[seq_along(v1) %% n == 0L] = 2
rep(x, ifelse(seq_along(x) %% n, 1, 2))