将字符串日期转换为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>