说我们有以下内容:
a=c( 1, 9, 5, 7, 8, 11)
length(a) ## 6
我希望获得:
a_desired=c( 1, 1, 9, 9, 5, 5, 7, 7, 8, 11)
length(a_desired) ## 10
基本上它会在达到所需长度时停止复制,在本例中为10。
如果所需长度为14,
a_desired=c( 1, 1, 1, 9, 9, 9, 5, 5, 7, 7, 8, 8, 11, 11)
是否有人建议如何获取此信息或者之前提到的类似链接?(我不太确定要查找的关键字)
答案 0 :(得分:1)
您可以编写自己的函数来执行此类操作
extend_to <- function(x, len) {
stopifnot(len>0)
times = len %/% length(x)
each <- rep(times, length(x))
more <- len-sum(each)
if (more>0) {
each[1:more] <- each[1:more]+1
}
rep(x, each)
}
a <- c( 1, 9, 5, 7, 8, 11)
extend_to(a, 6)
# [1] 1 9 5 7 8 11
extend_to(a, 10)
# [1] 1 1 9 9 5 5 7 7 8 11
extend_to(a, 14)
# [1] 1 1 1 9 9 9 5 5 7 7 8 8 11 11
extend_to(a, 2)
# [1] 1 9
我们使用rep()
重复每个元素一定次数。
答案 1 :(得分:0)
因此,如果您的序列当前长度为M,并且您希望长度为N&gt; M,那么你有这些可能性:
N&lt; = 2M:将第一个(N-M)项加倍
2M&lt; N <= 3M:第一个(N-2M)项目的三倍,其余的两倍
3M&lt; N <= 4M:第一个(N-3M)项目翻两番,其余为三倍。
等等。
首先,将目标长度除以当前长度,发言,并多次复制序列。然后添加第一个余数项目的额外副本。
a=c( 1, 9, 5, 7, 8, 11)
m=length(a)
n=10 # desired new length
new_a = append(
rep(a[1:(n%%m)],each=ceiling(n/m)),
rep(a[((n%%m)+1):m],each=floor(n/m)))