Рассмотрим следующие данные, где левый столбец представляет бит (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))
код [ 'plot' команда с' type' флаг установлен в '' s' или S'] (https: // стат .ethz.ch/R-manual/R-devel/library/graphics/html/plot.html) должен вас заинтересовать. _ «Типы двух шагов отличаются по своему предпочтению xy: переход от (x1, y1) к (x2, y2) с x1
dfri
@dfri, я рассмотрю это. Благодаря! – merlin2011
@dfri, Почему вы удалили свой ответ? Я собирался попробовать. – merlin2011