R - 生成一系列数字

时间:2015-06-29 16:12:03

标签: r numbers sequence

我正在尝试创建6个案例的序列,但间隔为144个案例。

像这样的例子

c(1:6, 144:149, 288:293)

1   2   3   4   5   6 144 145 146 147 148 149 288 289 290 291 292 293

如何使用

自动生成这样的序列
seq 

还是与其他功能?

5 个答案:

答案 0 :(得分:17)

我发现sequence函数在这种情况下很有用。如果你的数据是这样的结构:

(info <- data.frame(start=c(1, 144, 288), len=c(6, 6, 6)))
#   start len
# 1     1   6
# 2   144   6
# 3   288   6

然后你可以用:

在一行中完成
sequence(info$len) + rep(info$start-1, info$len)
#  [1]   1   2   3   4   5   6 144 145 146 147 148 149 288 289 290 291 292 293

请注意,即使您组合的序列长度不同,此解决方案仍然有效。

答案 1 :(得分:6)

这是一种方法:

unlist(lapply(c(0L,(1:2)*144L-1L),`+`,seq_len(6)))
# or...
unlist(lapply(c(1L,(1:2)*144L),function(x)seq(x,x+5)))

这是我喜欢的方式:

rep(c(0L,(1:2)*144L-1L),each=6) + seq_len(6)

...泛化

rlen  <- 6L
rgap  <- 144L
rnum  <- 3L

starters <- c(0L,seq_len(rnum-1L)*rgap-1L)

rep(starters, each=rlen) + seq_len(rlen)
# or...
unlist(lapply(starters+1L,function(x)seq(x,x+rlen-1L)))

答案 2 :(得分:5)

也可以使用seqseq.int

来完成
x = c(1, 144, 288)
c(sapply(x, function(y) seq.int(y, length.out = 6)))

#[1]   1   2   3   4   5   6 144 145 146 147 148 149 288 289 290 291 292 293

正如@Frank在评论中提到的是使用@ josilber的数据结构实现这一目的的另一种方法(这在不同的时间间隔需要不同的序列长度时尤其有用)

c(with(info, mapply(seq.int, start, length.out=len)))

#[1]   1   2   3   4   5   6 144 145 146 147 148 149 288 289 290 291 292 293

答案 3 :(得分:0)

我正在使用R 3.3.2。 OSX 10.9.4

我试过了:

a<-c()  # stores expected sequence
f<-288  # starting number of final sub-sequence
it<-144 # interval
for (d in seq(0,f,by=it))
{
    if (d==0)
    {
        d=1
    }
    a<-c(a, seq(d,d+5))
    print(d)
}
print(a)

AND预期的序列存储在。

[1] 1 2 3 4 5 6 144 145 146 147 148 149 288 289 290 291 292 293

另一次尝试:

a<-c()  # stores expected sequence
it<-144 # interval
lo<-4   # number of sub-sequences
for (d in seq(0,by=it, length.out = lo))
{
    if (d==0)
    {
        d=1
    }
    a<-c(a, seq(d,d+5))
    print(d)
}
print(a)

结果:

[1] 1 2 3 4 5 6 144 145 146 147 148 149 288 289 290 291 292 293 432 433 434 435 436 437

答案 4 :(得分:0)

我通过cumsum函数解决了这个问题

seq_n <- 3 # number of sequences
rep(1:6, seq_n) + rep(c(0, cumsum(rep(144, seq_n-1))-1), each = 6)
# [1]   1   2   3   4   5   6 144 145 146 147 148 149 288 289 290 291 292 293

不需要像@josilber的解决方案那样计算序列的起始值,但是序列的长度必须恒定。