给定一个向量,例如
> x
[1] 1 1 2 1 1 1 5 1 1 1 5 7 1 1 1 1 1 1 1 1 1
我想复制元素 n 次——但是——我希望旧元素被复制覆盖。使用基本的代表函数给出:
> rep(x,x)
[1] 1 1 2 2 1 1 1 5 5 5 5 5 1 1 1 5 5 5 5 5 7 7 7 7 7 7 7 1 1 1 1 1 1 1 1 1
这只是将原始未移动的相邻元素向右移动。但是,如果我要用复制的值重复覆盖每个相邻的元素(这里一步一步地用每个元素从左到右替换),我会有类似...
112111511157111111111
112211511157111111111
112211555557111111111
112211555555555111111
112211555557777777111
请注意,对于每 N 次复制的元素,它只会覆盖 N 个相邻的右邻居。我可以循环执行此操作,但是是否有基于快速向量的方法来执行此操作?
na.locf 很接近(将 1s 预先设置为 NA),但是(据我所知)它将用 rep 值填充 ALL 或仅最右边的固定数量的 NA,而不是恰好 N 个右邻居。
一种可能的替代方法是用全零代替原始零,并且仅使用二进制 1 值重复和覆盖元素 N 次。例如上面将是......例如:
x<- c(0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 5, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0)
sig<-c(0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0)
编辑:澄清一下,它应该紧凑地扩展到任意数量的可重复元素(与 rep 函数相同)。