2016-03-10 2 views
6

Рассмотрим следующие данные, где левый столбец представляет бит (1 или 0), а правый столбец представляет собой количество микросекунд, которые мы наблюдаем за битом.Как я могу построить прямоугольные данные в 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 

Я хотел бы построить эти данные таким образом, что существует горизонтальная линия при 0 с шириной 664, с последующим повышением до горизонтальной линии на 1 с шириной 63, с последующим падением на горизонтальная линия в 0 с шириной 404 и т. д.

Есть ли эффективный и прямой способ построить это в R, который не требует ручного сравнения с границами?

Вот мой текущий код, который делает это крайне неэффективным и наивным, поэтому я надеюсь, что есть лучший способ.

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

код [ 'plot' команда с' type' флаг установлен в '' s' или S'] (https: // стат .ethz.ch/R-manual/R-devel/library/graphics/html/plot.html) должен вас заинтересовать. _ «Типы двух шагов отличаются по своему предпочтению xy: переход от (x1, y1) к (x2, y2) с x1 dfri

+0

@dfri, я рассмотрю это. Благодаря! – merlin2011

+0

@dfri, Почему вы удалили свой ответ? Я собирался попробовать. – merlin2011

ответ

6

Как уже упоминалось в моем комментарии, plot command с type флаг установлен s должен сделать трюк.

Например, для вас первые 10 образцов:

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

Смежные вопросы