我有一个csv文件,其中包含日期和时间列,格式为m / dd / yy H:M。我想沿着我的x轴绘制这个,沿着y轴绘制数据。我看过这篇文章:Problems creating datetime series graph in R using ggplot,但至少有一些建议似乎已经过时了。
我试着通过这个来生成图表:
discharge <- read.csv("~/mac2017/Everything_plot/discharge2.csv", header
= TRUE, stringsAsFactors = FALSE, strip.white = TRUE)
discharge$Date_Time <- as.POSIXct(discharge$Date_Time, "%m/%d/%y %h:%m")
ggplot(data=discharge, aes(x=Date_Time, y=Discharge, type=1, group=1))+
geom_line()+
scale_x_date(date_labels = ("%b-%Y")) + #breaks = date_breaks("1
month"), labels = date_format("%m/%Y"))+
scale_y_continuous()
我已尝试将Date列格式化为Date
对象,因为该帖子的答案已建议,但仍然出现此错误:
Error in as.Date(x, tx, ...) :
character string is not in a standard unambiguous format
因此,我切换到使用as.POSIXct命令,但是一直有关于明确格式的相同错误。我尝试过使用strptime
,但又一次收到同样的错误。我认为strptime
会修复明确的格式错误,因为它用于指定当前格式。
这是我很长的csv的前几行:
Date Time Date_Time Discharge
8/23/2016 0:00 8/23/16 0:00 92.00
8/23/2016 0:15 8/23/16 0:15 91.00
8/23/2016 0:30 8/23/16 0:30 90.00
8/23/2016 0:45 8/23/16 0:45 89.00
8/23/2016 1:00 8/23/16 1:00 88.00
8/23/2016 1:15 8/23/16 1:15 87.00
8/23/2016 1:30 8/23/16 1:30 86.00
8/23/2016 1:45 8/23/16 1:45 86.00
8/23/2016 2:00 8/23/16 2:00 86.00
8/23/2016 2:15 8/23/16 2:15 85.00
8/23/2016 2:30 8/23/16 2:30 84.00
8/23/2016 2:45 8/23/16 2:45 83.00
8/23/2016 3:00 8/23/16 3:00 82.00
我对R相当新。关于我做错了什么的想法?
答案 0 :(得分:0)
考虑使用“lubridate”包。使用它比R的内置日期/时间功能更直观。例如,我可以使用mdy()函数来设置/提取日期列。或使用month()函数设置/提取月份。
答案 1 :(得分:0)
查看tidyverse
有助于您进行数据导入,清理以及处理日期和时间的工具。 readr::read_csv
函数和lubridate
包将非常有用。
例如,我们首先加载名称空间并保存临时.csv
library(readr)
library(lubridate)
library(dplyr)
library(ggplot2)
# save data as a csv for the example
cat(
"Date, Time, Date_Time, Discharge
8/23/2016, 0:00, 8/23/16 0:00, 92.00
8/23/2016, 0:15, 8/23/16 0:15, 91.00
8/23/2016, 0:30, 8/23/16 0:30, 90.00
8/23/2016, 0:45, 8/23/16 0:45, 89.00
8/23/2016, 1:00, 8/23/16 1:00, 88.00
8/23/2016, 1:15, 8/23/16 1:15, 87.00
8/23/2016, 1:30, 8/23/16 1:30, 86.00
8/23/2016, 1:45, 8/23/16 1:45, 86.00
8/23/2016, 2:00, 8/23/16 2:00, 86.00
8/23/2016, 2:15, 8/23/16 2:15, 85.00
8/23/2016, 2:30, 8/23/16 2:30, 84.00
8/23/2016, 2:45, 8/23/16 2:45, 83.00
8/23/2016, 3:00, 8/23/16 3:00, 82.00",
file = "discharge2.csv")
通过readr
读取数据如下:
# read in the data via readr::read_csv, reading in all data/time columns as
# characters and the Discharge column as a number
discharge <- readr::read_csv("discharge2.csv", col_type = "cccd")
我们将为每个日期时间变量设置正确的日期时间存储模式。这是使用dplry::mutate
调用和lubridate
函数mdy
,hm
,mdy_hm
完成的。这些函数将解析日期时间格式并相应地存储结果。
# set the date/time storage modes
discharge <-
discharge %>%
dplyr::mutate(Date = lubridate::mdy(Date),
Time = lubridate::hm(Time),
Date_Time = lubridate::mdy_hm(Date_Time))
一个简单的图形
ggplot(discharge) +
aes(x = Date_Time, y = Discharge) +
geom_point() + geom_line()