gpt4 book ai didi

具有覆盖元素的 R rep 函数

转载 作者:行者123 更新时间:2023-12-02 03:46:19 29 4
gpt4 key购买 nike

给定一个向量,例如

> 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 函数给出:

> 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 很接近(为 NA 预设 1s),但是(据我所知)它将用 rep 值填充所有或固定数量的最右边的 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 函数相同)。

最佳答案

y <- x
for (i in unique(y)) { # or perhaps sort(unique(y))
for (j in which(y==i)) {
x[seq(j, length.out=i)] <- i
}
}

x
## [1] 1 1 2 2 1 1 5 5 5 5 5 7 7 7 7 7 7 7 1 1 1

关于具有覆盖元素的 R rep 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16826008/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com