如何在R中创建一个基于变量控制的灵活列的表?

问题描述 投票:0回答:1

我想创建一个类似的故事。

1 1 6 6 10 10 ...
2 2 7 7 11 11 ... 
3 3 8 8 12 12 ...
4 4 9 9 13 13 ...
5 5     14 14 ...
        15 15 ...

我想使用变量:

n(重复)和m(总列数)和k(k=前一列的尾数+1,例如:6=5+1,10=9+1),以及不同的行数长度来创建一个表格。

我知道我可以用like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like.Like:

rep(list(1:5,6:9,10:15), each = 2)),

但如何使用一个通用表达式将它们作为参数来列出list(1:5,6:9,10:15,...使用n,m,k表达式...)。

我试着使用循环for(i in 1:m)等......但最终无法工作,我想通过使用unlist()来建立一个序列:1,2,3,4,5,6,1,2,3,4,5,6......)非常感谢。

r
1个回答
2
投票

也许下面的代码可以帮助

len <- c(5,4,6)
res <- unlist(unname(rep(split(1:sum(len),
                               findInterval(1:sum(len),cumsum(len)+1)),
                         each = 2)))

由此可见

> res
 [1]  1  2  3  4  5  1  2  3  4  5  6  7  8  9  6  7  8  9 10 11 12 13 14 15 10 11 12 13 14 15

0
投票

也许,这样的东西会有帮助。

#Number of times to repeat
r <- 2
#Length of each sequence
len <- c(5, 4, 6)
#Get the end of the sequence
end <- cumsum(Glen)
#Calculate the start of each sequence
start <- c(1, end[-length(end)] + 1)

#Create a sequence of start and end and repeat it r times
Map(function(x, y) rep(seq(x, y), r), start, end)
#[[1]]
# [1] 1 2 3 4 5 1 2 3 4 5

#[[2]]
#[1] 6 7 8 9 6 7 8 9

#[[3]]
# [1] 10 11 12 13 14 15 10 11 12 13 14 15

你可以 unlist 以获得一个矢量。

unlist(Map(function(x, y) rep(seq(x, y), r), start, end))
© www.soinside.com 2019 - 2024. All rights reserved.