Использование R для построения временного ряда с дискретными данными - PullRequest
0 голосов
/ 01 августа 2010

Привет,

У меня есть таблица, которая выглядит следующим образом:

      date value
2007-11-05 134
2007-12-08 234
2008-03-10 322
2008-03-11 123
...

В итоге, он имеет ежедневные значения за три года, но не имеет значений для каждого дня. Мне нужно нарисовать график линейной диаграммы (data $ date, data $ value) за весь промежуток времени, но, учитывая, что в те дни в таблице не указывается значение, она должна принимать последнее известное. Другими словами, таблица имеет значения только в те дни, когда она изменилась.

Есть ли эксперты по R, которые могут мне помочь? : -)

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 03 августа 2010

Гюго, все повторяющиеся значения для одного дня одинаковые или разные?Если то же самое, вы можете использовать пакет sqldf для выбора отдельной даты, значения и графика.Если они разные, вы можете построить график, используя тип geom_step ggplot для пошаговой диаграммы, и покажет диапазон для того же значения оси x.См. Пример кода ниже, я добавил два значения для 1/15/2008.

data = data.frame(date = as.Date(c('2007-11-05', '2007-12-08', '2008-03-10',  
                                   '2008-03-11', '2008-01-15', '2008-01-15')),  
                                  value = c(134, 234, 322, 123, 175, 275))
ggplot(data, aes(x = date, y = value)) + geom_step()

Если несколько значений для дня совпадают, то ggplot просто увидит их как одно.

1 голос
/ 01 августа 2010

Как то так?

require(zoo)
data = data.frame(date = as.Date(c('2007-11-05', '2007-12-08', '2008-03-10', '2008-03-11')), value = c(134, 234, 322, 123))
data = zoo(data$value, data$date)
days = seq(start(data), end(data), "day")
data2 = na.locf(merge(data, zoo(,days)))
plot(data2)
0 голосов
/ 23 августа 2010

Попробуй это.Мы читаем в агрегации данных, используя tail (x, 1), чтобы получить последние данные за любой день, а затем строим график.(Строка read.zoo сохраняет пример самодостаточным, но на самом деле его можно заменить чем-то вроде закомментированной строки.)

Lines <- "date value
2007-11-05 132
2007-11-05 134
2007-12-08 231
2007-12-08 234
2008-03-10 322
2008-03-11 123"

library(zoo)

# z <- read.zoo("myfile.dat", header = TRUE, aggregate = function(x) tail(x, 1))

z <- read.zoo(textConnection(Lines), header = TRUE, aggregate = function(x) tail(x, 1))
plot(z)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...