如何使用R将日期时间格式转换为'ddmmyyyy'?

3

我的日期 数据框 看起来是这样的:

  Date              Values
  1JAN2018           80
  23DEC2019          21.3
  ...                ...

我该如何将这个日期格式化为ddmmyyyy,以便我可以使用ggplot创建时间序列图?

我做了什么?

Date <- as.Date(Date, '%d%m%Y')

很不幸,那似乎没什么用。
非常感谢你! :D
编辑:
感谢回答。这是我的当前情节。有可能更平滑些吗?它看起来很静态:
enter image description here
每天在同一时间(大约40次)测量两个值的数值(HH,MM)。使用您的代码:
 ggplot(aug, aes(aug$DATE)) + 
 #geom_smooth(stat = "identity") +
 geom_line(aes(y = aug$VALUE_ONE, colour = "aug$VALUE_ONE")) +
 geom_line(aes(y = aug$VALUE_TWO, colour = "aug$VALUE_TWO")) +
 ggtitle("Time Series Data)")+
 xlab("Time")+ 
 ylab("Value")+
 theme(axis.text.x = element_text(angle = 60, hjust = 1), 
    plot.title = element_text(hjust = 0.5))

编辑2:

再次感谢回答。为了更好地查看数据,数据如下:

  Date        ValueOne      ValueTwo    Time
  1JAN2018     20              11       05:22
  1JAN2018     25              12       05:33
  1JAN2018     34              44       05:59
  1JAN2018     32              55       06:30
  1JAN2018      4              88       06:48
  1JAN2018     11              78       10:33
  1JAN2018     12              100      15:33

每天都会在不同的时间点进行约40次ValueOne和ValueTwo的测量。由于有这么多的测量,除非我为单独一天绘制图表,否则对我来说这条线是静态的。在这种情况下,它可以正常工作。你有什么想法吗?

3个回答

1
一个简单的解决方案是使用 lubridate 包。
# Install lubridate package
install.packages("lubridate")


# Use lubridate package
library(lubridate)

dmy('23DEC2019')
[1] "2019-12-23"

dmy('1JAN2018')
[1] "2018-01-01"


# Plotting the data in ggplot
library(ggplot2)

ggplot(data, aes(x=date, y=values)) + 
  geom_smooth(stat = "identity") +
  ggtitle("Time Series Data)")+
  xlab("Time")+ 
  ylab("Value")+
  theme(axis.text.x = element_text(angle = 60, hjust = 1), 
        plot.title = element_text(hjust = 0.5))

谢谢!它可行了!唯一的问题是ggplot非常静态。我添加了两个geom_lines(因为我有2个不同的值),并尝试为8月份绘制它。结果发现每天的线都是直线(上下),而不是正常的时间序列图。如果您需要,我可以发送给您一张图片? - InsertUserNameHere
1
如果你想要一个非静态的图表,你可以使用 plotly 库,它提供了一些交互功能。是的,请发布图片。另外,你能否给这个答案点个赞呢 :) - floss
1
能否将数据集的链接放在这里?同时,看一下这个链接:http://www.sthda.com/english/articles/32-r-graphics-essentials/128-plot-time-series-data-using-ggplot/ 可以用于处理“多时间序列”变量。 - floss
嗨!谢谢你的链接,我一定会好好查看的。很抱歉,我不能放置数据集的链接。但是我可以在我的问题上添加数据集中每天的外观描述。我现在就加上它。 - InsertUserNameHere

1

anytime包提供了anytime()anydate()两个函数,它们可以从任何输入格式中获取日期和时间信息,无需指定格式字符串。

R> library(anytime)                     
R> anydate(c("23DEC2019", "1JAN2018"))  
[1] "2019-12-23" "2018-01-01"             
R> 

0

只需要这样就足够了

as.Date(x, format = "%d%b%Y")

然而,对于某些语言环境,这会产生NA

x <- c("1JAN2018", "23DEC2019")
as.Date(x, format = "%d%b%Y")
# [1] "2018-01-01" NA

你会发现这个给出了NA的结果,对于我的输入23DEC2019

来自?strptime

## read in date info in format 'ddmmmyyyy'
## This will give NA(s) in some non-English locales; setting the C locale
## as in the commented lines will overcome this on most systems.
## lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")

所以你可能也需要

lct <- Sys.getlocale("LC_TIME"); Sys.setlocale("LC_TIME", "C")

现在再次运行上面的代码

as.Date(x, "%d%b%Y")
#[1] "2018-01-01" "2019-12-23"

最后,将语言环境改回原来的设置。
Sys.setlocale("LC_TIME", lct)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接