2016-03-10 17 views
6

Considerare i seguenti dati, in cui la colonna sinistra rappresenta un bit (1 o 0) e la colonna destra rappresenta il numero di microsecondi che osserviamo il bit.Come posso tracciare i dati di onda quadra in R?

0 664 
1 63 
0 404 
1 544 
0 651 
1 686 
0 507 
1 1155 
0 664 
1 271 
0 456 
1 2763 
0 664 
1 115 
0 456 
1 4010 
0 664 
1 63 
0 351 
1 3855 

Vorrei tracciare questi dati tale che vi sia una linea orizzontale a 0 con una larghezza di 664, seguita da un luogo ad una linea orizzontale 1 con una larghezza di 63, seguita da una caduta a una linea orizzontale a 0 con una larghezza di 404 e così via.

Esiste un efficiente e un modo diretto per tracciare questo in R che non implica il confronto manuale con i limiti?

Ecco il mio codice corrente per fare ciò che è estremamente inefficiente e ingenuo, quindi spero che ci sia un modo migliore.

args <- commandArgs(trailingOnly = TRUE) 
data = read.table(args[1]) 
current = 1 
sumA = 0 

pf = function(x) { 
    if (x < sumA) { 
     return(data[current,1]) 
    } 

    for (i in current: length(data[,1])) { 
     sumA <<- sumA + data[i,2] 
     if (x < sumA) { 
      current <<- i + 1 
      return(data[i,1]) 
     } 
    } 
    return("OUT OF BOUNDS") 
} 
cumSum = colSums(data)[[2]] 
print(cumSum - 1); 


h = Vectorize(pf) 
plot(h, 1, cumSum-1, n=cumSum-1, lwd=0.001, xlim=c(0,cumSum-1)) 
+2

Il [ 'comando plot' con' type' bandiera impostato a 's' o' S'] (https: // stat .ethz.ch/R-manual/R-devel/library/graphics/html/plot.html) dovrebbe interessarti. _ "I due tipi di step differiscono nella loro preferenza xy: passando da (x1, y1) a (x2, y2) con x1 dfri

+0

@dfri, ci penserò su. Grazie! – merlin2011

+0

@dfri, Perché hai eliminato la tua risposta? Stavo per provarlo. – merlin2011

risposta

6

Come detto nel mio commento, plot command con type flag set a s dovrebbe fare il trucco.

Ad esempio, per la prima volta 10 campioni:

x <- c(0,664,63,404,544,651,686,507,1155,664,271) 
xC <- cumsum(x) 
y <- c(0,1,0,1,0,1,0,1,0,1,0) 
plot(xC,y,type='s') 

enter image description here