私は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
または別の機能で?
この場合、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
次に、次のようにして1行でこれを行うことができます。
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つのアプローチを次に示します。
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)))
これは、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
ここのコメントで@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
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)
そして、予想されるシーケンスはaに保存されます。
[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