如何将data.frame与第一列中的因子转换为数据类型

时间:2017-08-28 23:36:53

标签: r dataframe plot ggplot2 type-conversion

我有一个关于如何格式化要在ggplot中使用的列数据类型的问题。

我有一个名为“dat1”的变量,它是一个由字符组成的矩阵

dat1 <- c("2017-07-14 18:00:00", "2017-07-14 19:00:00","2017-07-14 20:00:00","2017-07-14 21:00:00", "2017-07-14 22:00:00", "2017-07-14 23:00:00")
dat1=as.matrix(dat1)

> class(dat1)
 "matrix"

> class(dat1[,1])
 "character"

“mean_hour”是另一个变量,它是一个数字类型的矩阵

mean_hour <- c(132,134,432,233,564,345)
mean_hour=as.matrix(mean_hour)

> class(mean_hour)
[1] "matrix"

> class(mean_hour[,1])
[1] "numeric"

然后我用dat1和mean_hour创建了一个data.frame:

med_horaria_plot <- data.frame(dat1,mean_hour)

这个data.frame保持这种方式:

> med_horaria_plot

             dat1                     mean_hour
             1 2017-07-14 18:00:00       132
             2 2017-07-14 19:00:00       134
             3 2017-07-14 20:00:00       432
             4 2017-07-14 21:00:00       233
             5 2017-07-14 22:00:00       564
             6 2017-07-14 23:00:00       345

> class(med_horaria_plot[,1])
[1] "factor"

> class(med_horaria_plot[,2])
[1] "numeric"

> class(med_horaria_plot)
[1] "data.frame"

这是一个较小的版本 - 完整的data.frame要大得多,当我在ggplot中绘图时,x轴上的日期都叠加了

如何更改这些列的类型以便我可以在ggplot中使用它们,然后在绘图上选择我想要的小时数以避免重叠

1 个答案:

答案 0 :(得分:0)

您可以直接将dat1列转换为POSIXct(ggplot接受的两种日期格式之一):

med_horaria_plot$dat1 <- as.POSIXct(med_horaria_plot$dat1, format = "%Y-%m-%d %H:%M:%S")

然后像往常一样绘图,因为ggplot倾向于自己处理POSIXct数据上的标签:

ggplot() + 
    geom_line(data = med_horaria_plot, aes(x = dat1, y = (mean_hour)),group=1,linetype=1)

如果您仍想更改标签,可以尝试scale_x_datetime()

ggplot() + 
    geom_line(data = med_horaria_plot, aes(x = dat1, y = (mean_hour)),group=1,linetype=1) +
    scale_x_datetime(date_labels = "%b %d")