numeros - seq en r
R-Generar una secuencia de nĂºmeros (4)
Estoy tratando de crear secuencias de 6 casos, pero con intervalos de 144 casos.
Como este por ejemplo
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
¿Cómo podría generar automáticamente tal secuencia con
seq
¿O con otra función?
Aquí hay un enfoque:
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)))
Aquí hay una manera que me gusta un poco mejor:
rep(c(0L,(1:2)*144L-1L),each=6) + seq_len(6)
Generalizando ...
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)))
Encuentro que la función de sequence
es útil en este caso. Si tuvieras tus datos en una estructura como esta:
(info <- data.frame(start=c(1, 144, 288), len=c(6, 6, 6)))
# start len
# 1 1 6
# 2 144 6
# 3 288 6
entonces podrías hacer esto en una línea con:
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
Tenga en cuenta que esta solución funciona incluso si las secuencias que está combinando tienen diferentes longitudes.
Esto también se puede hacer usando seq
o 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
Como @Frank se menciona en los comentarios aquí es otra forma de lograr esto utilizando la estructura de datos de @ josilber (Esto es útil particularmente cuando hay una necesidad de una longitud de secuencia diferente para diferentes intervalos)
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
Estoy usando R 3.3.2. OSX 10.9.4
Lo intenté:
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)
Y la secuencia esperada se almacena en a.
[1] 1 2 3 4 5 6 144 145 146 147 148 149 288 289 290 291 292 293
Y otro intento:
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)
El resultado:
[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