gia*_*iac 19 numbers r 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
Run Code Online (Sandbox Code Playgroud)
我怎么能自动生成这样的序列
seq
Run Code Online (Sandbox Code Playgroud)
还是与其他功能?
jos*_*ber 20
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
Run Code Online (Sandbox Code Playgroud)
然后你可以在一行中做到这一点:
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
Run Code Online (Sandbox Code Playgroud)
请注意,即使您组合的序列长度不同,此解决方案仍然有效.
这是一种方法:
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)))
Run Code Online (Sandbox Code Playgroud)
这是我喜欢的一种方式:
rep(c(0L,(1:2)*144L-1L),each=6) + seq_len(6)
Run Code Online (Sandbox Code Playgroud)
归纳...
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)))
Run Code Online (Sandbox Code Playgroud)
这也可以使用seq或完成seq.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
Run Code Online (Sandbox Code Playgroud)
正如@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
Run Code Online (Sandbox Code Playgroud)