Ошибка из данных о графике ggplot2 - пропущено значение, где требуется TRUE / FALSE - PullRequest
7 голосов
/ 26 августа 2011

Я пытаюсь построить некоторые оценки, которые я извлекаю из внешнего источника. Формат даты выглядит следующим образом:

2011-08-23T17:07:05

Так что я разбираю это с strptime(date, "%FT%X") и получаю POSIXlt. Я получаю полный кадр данных, который выглядит следующим образом:

                  date    subject  grade
1  2011-08-23 17:07:05 AP Biology  95.83
2  2011-08-24 17:07:03 AP Biology  95.83
3  2011-08-25 17:08:27 AP Biology  95.83
4  2011-08-17 17:05:54 US History 157.14
5  2011-08-18 17:05:24 US History 157.14
6  2011-08-19 17:05:35 US History 157.14
7  2011-08-22 17:06:25 US History 157.14
8  2011-08-23 17:07:05 US History 157.14
9  2011-08-24 17:07:03 US History 157.14
10 2011-08-25 17:08:27 US History 157.14
11 2011-08-19 17:05:35   Yearbook   0.00
12 2011-08-22 17:06:25   Yearbook   0.00
13 2011-08-23 17:07:05   Yearbook 100.00
14 2011-08-24 17:07:03   Yearbook 100.00
15 2011-08-25 17:08:27   Yearbook 100.00

Со следующей структурой:

'data.frame':   15 obs. of  3 variables:
 $ date   : POSIXlt, format: "2011-08-23 17:07:05" "2011-08-24 17:07:03" ...
 $ subject: Factor w/ 3 levels "AP Biology","US History",..: 1 1 1 2 2 2 2 ...
 $ grade  : num  95.8 95.8 95.8 157.1 157.1 ...

Когда я пытаюсь построить эти данные:

> ggplot(data=grades, aes(date, grade, factor=subject)) + geom_line()
Error in if (length(range) == 1 || diff(range) == 0) { : 
  missing value where TRUE/FALSE needed

Я не знаю, что я здесь делаю неправильно. Я сузил это до обработки даты, выполнив это:

ggplot(data=grades,
       aes(seq(length(grades[,1])),
           grade, color=subject)) + geom_line()

... но как мне правильно обработать дату?

Ответы [ 2 ]

12 голосов
/ 26 августа 2011

В ggplot2 поддерживаются только времена класса POSIXct. Класс POSIXct представляет число (со знаком) секунд с начала 1970 года (в часовом поясе UTC) в виде числового вектора. Класс POSIXlt - это именованный список векторов, представляющих девять элементов (sec, min, hour и т. Д.).

Вы можете использовать следующее:

grades$date <- as.POSIXct(grades$date)
2 голосов
/ 26 августа 2011

Я думаю, я понял это.Разница в понимании POSIXct против POSIXlt.POSIXlt - календарное время по частям.POSIXct - количество секунд с начала эпохи.strptime возвращает `POSIXct

. Чтобы использовать эти данные, мне нужно преобразовать временные метки:

grades$date <- as.POSIXct(grades$date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...