ggplot2绘制日期数据时出错 - 缺少需要TRUE / FALSE的值

时间:2011-08-26 08:25:44

标签: r ggplot2 posixct

我正在尝试绘制一些我从外部来源提取的成绩。日期格式如下所示:

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 个答案:

答案 0 :(得分:12)

ggplot2中仅支持类POSIXct次。类POSIXct表示自1970年初以来(在UTC时区中)作为数字向量的(带符号)秒数。类POSIXlt是表示九个元素(secminhour等)的矢量的命名列表。

您可以使用以下内容:

grades$date <- as.POSIXct(grades$date)

答案 1 :(得分:2)

我想我已经弄明白了。区别在于了解POSIXctPOSIXltPOSIXlt是部分日历时间。 POSIXct是自纪元以来的秒数。 strptime返回`POSIXct

为了使用这些数据,我需要转换时间戳:

grades$date <- as.POSIXct(grades$date)