将字符串日期转换为R中的日期
我有一个数据框,它包含类似字符串的日期将字符串日期转换为R中的日期,r,R,我有一个数据框,它包含类似字符串的日期 1 Aug 10, 2018 2 Aug 13, 2018 3 Aug 9, 2018 4 Jan 23, 2018 5 Aug 31, 2018 6 Jan 29, 2018 如何将其显示为: 1 10/08/2018 #I'm european 2 13/08/2018 3 09/08/2018 4 23/01/2018 等等 使其成为日期数据类型而不是字符串 参见此或?strtime for
1 Aug 10, 2018
2 Aug 13, 2018
3 Aug 9, 2018
4 Jan 23, 2018
5 Aug 31, 2018
6 Jan 29, 2018
如何将其显示为:
1 10/08/2018 #I'm european
2 13/08/2018
3 09/08/2018
4 23/01/2018
等等
使其成为日期数据类型而不是字符串 参见此或?strtime
format(as.Date("Aug 10, 2018", format = "%b %d, %y"), "%d/%m/%Y")
## [1] "10/08/2020"
使用@Dirk的df:
df <- data.frame(v = 1:6, d = c("Aug 10, 2018", "Aug 13, 2018", "Aug 9, 2018",
"Jan 23, 2018", "Aug 31, 2018", "Jan 29, 2018"))
df$newd <- format(as.Date(df$d, format = "%b %d, %y"), "%d/%m/%Y")
# v d newd
# 1 1 Aug 10, 2018 10/08/2020
# 2 2 Aug 13, 2018 13/08/2020
# 3 3 Aug 9, 2018 09/08/2020
# 4 4 Jan 23, 2018 23/01/2020
# 5 5 Aug 31, 2018 31/08/2020
# 6 6 Jan 29, 2018 29/01/2020
df要使其可复制:
R> df <- data.frame(v=1:6, d=c("Aug 10, 2018", "Aug 13, 2018", "Aug 9, 2018",
+ "Jan 23, 2018", "Aug 31, 2018", "Jan 29, 2018"))
R> df
v d
1 1 Aug 10, 2018
2 2 Aug 13, 2018
3 3 Aug 9, 2018
4 4 Jan 23, 2018
5 5 Aug 31, 2018
6 6 Jan 29, 2018
R> library(anytime) # parse dates and times without formats
R> df$date <- anydate(df$d) # finds matching format
R> df
v d date
1 1 Aug 10, 2018 2018-08-10
2 2 Aug 13, 2018 2018-08-13
3 3 Aug 9, 2018 <NA>
4 4 Jan 23, 2018 2018-01-23
5 5 Aug 31, 2018 2018-08-31
6 6 Jan 29, 2018 2018-01-29
R>
最后,我建议不要使用您想要的格式,因为它可能会误导/误解,但为了完整性:
R> df$bad <- format(df$date, "%d/%m/%Y")
R> df
v d date fmt bad
1 1 Aug 10, 2018 2018-08-10 Fri, 10 Aug 2018 10/08/2018
2 2 Aug 13, 2018 2018-08-13 Mon, 13 Aug 2018 13/08/2018
3 3 Aug 09, 2018 2018-08-09 Thu, 09 Aug 2018 09/08/2018
4 4 Jan 23, 2018 2018-01-23 Tue, 23 Jan 2018 23/01/2018
5 5 Aug 31, 2018 2018-08-31 Fri, 31 Aug 2018 31/08/2018
6 6 Jan 29, 2018 2018-01-29 Mon, 29 Jan 2018 29/01/2018
R>
R>df$bad df
v d日期fmt坏
2018年8月10日2018年8月10日星期五2018年8月10日2018年8月10日
2018年8月13日,2018年8月13日,星期一,2018年8月13日,2018年8月13日
2018年8月3日2018年8月9日2018年8月9日星期四2018年8月9日2018年8月9日
2018年1月23日4日2018年1月23日星期二2018年1月23日2018年1月23日
5 2018年8月31日2018年8月31日星期五2018年8月31日2018年8月31日
6 2018年1月29日2018年1月29日星期一2018年1月29日2018年1月29日
R>
使用/
作为分隔符会使人们认为这是愚蠢的北美m/d/y订单。我建议您至少将%m
替换为%b
您可以在R中使用lubdridate包
install.packages(“lubridate”)
library(lubridate)
df$time Check out?format.Date
OP询问日期的欧洲格式(dd/mm/yyyy)(令人恼火的是,这是anydate无法识别的格式,但这与问题无关)。您的答案需要一个额外的format
行来显示请求的日期。很好,谢谢。补充。
R> df$bad <- format(df$date, "%d/%m/%Y")
R> df
v d date fmt bad
1 1 Aug 10, 2018 2018-08-10 Fri, 10 Aug 2018 10/08/2018
2 2 Aug 13, 2018 2018-08-13 Mon, 13 Aug 2018 13/08/2018
3 3 Aug 09, 2018 2018-08-09 Thu, 09 Aug 2018 09/08/2018
4 4 Jan 23, 2018 2018-01-23 Tue, 23 Jan 2018 23/01/2018
5 5 Aug 31, 2018 2018-08-31 Fri, 31 Aug 2018 31/08/2018
6 6 Jan 29, 2018 2018-01-29 Mon, 29 Jan 2018 29/01/2018
R>