在r中将字符转换为日期(Thu Jun 14 *** 2018-05-14)

时间:2018-05-16 10:41:49

标签: r

我有一个关于世界杯比赛的数据框,包括日期,位置,match_name等。 在此数据框中,我想将日期列转换为日期格式" 2018-05-06"

这是我的档案;

  date          match_name          price      
1 Thu Jun 14 Russia v Saudi Arabia  €453.92  
2 Fri Jun 15 Egypt v Uruguay        €90.00   
3 Tue Jun 19 Russia v Egypt         €297.45  
4 Wed Jun 20 Uruguay v Saudi Arabia €95.00   

这是我的期望;

  date          match_name          price      
1 2018-05-14 Russia v Saudi Arabia  €453.92  
2 2018-05-15 Egypt v Uruguay        €90.00   
3 2018-05-19 Russia v Egypt         €297.45  
4 2018-05-20 Uruguay v Saudi Arabia €95.00  

3 个答案:

答案 0 :(得分:1)

好的,假设你有这个data.frame:

myDF <-as.data.frame(x=list(date=c("Thu Jun 14","Fri Jun 15","Tue Jun 19","Wed Jun 20")))

构造以下data.frame:

        date
1 Thu Jun 14
2 Fri Jun 15
3 Tue Jun 19
4 Wed Jun 20

假设每场比赛都在2018年:

#for handling month abbreviations in English:
Sys.setlocale("LC_TIME", "en_US.UTF-8") 

myDF$date <- as.Date(paste0(substr(myDF$date,5,10),", 2018"),format="%b %d, %Y")

由此产生的myDF:

        date
1 2018-06-14
2 2018-06-15
3 2018-06-19
4 2018-06-20

您可以在必要时将2018更改为您喜欢的任何年份。

答案 1 :(得分:1)

这肯定不是最简单的方法,但我只是想让你快速回答。

library(stringr)
library(dplyr)
Data=data.frame(date=c("Thu Jun 14","Fri Jun 15","Tue Jun 19","Wed Jun 20"),match_name=c("a","b","c","d"),price=c(1,2,3,4))
Data$date=as.character(Data$date)

regexp <- "[[:digit:]]+"
Data=mutate(Data,datenum=str_extract(Data$date, regexp))
Data=mutate(Data,monthnum=str_extract(Data$date, regexp))

Data=mutate(Data,monthname=str_extract(Data$date,"Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec"))

Data=mutate(Data,monthnum=if(Data$monthname=="Jan")
                      "01"
       else if(Data$monthname=="Feb")
         "02"
       else if(Data$monthname=="Mar")
         "03"
       else if(Data$monthname=="Apr")
         "04"
       else if(Data$monthname=="May")
         "05"
       else if(Data$monthname=="Jun")
         "06"
       else if(Data$monthname=="Jul")
         "07"
       else if(Data$monthname=="Aug")
         "08"
       else if(Data$monthname=="Sep")
         "09"
       else if(Data$monthname=="Oct")
         "10"
       else if(Data$monthname=="Nov")
         "11"
       else if(Data$monthname=="Dec")
         "12"
       )
mutate(Data,Final_Date=paste0("2018-",monthnum,"-",datenum))

导致

date match_name price datenum monthnum monthname Final_Date
1 Thu Jun 14          a     1      14       06       Jun 2018-06-14
2 Fri Jun 15          b     2      15       06       Jun 2018-06-15
3 Tue Jun 19          c     3      19       06       Jun 2018-06-19
4 Wed Jun 20          d     4      20       06       Jun 2018-06-20

答案 2 :(得分:0)

要将变量“date”转换为“2018-05-14”格式,您需要执行以下功能:

conv_date <- function(var, year){
  var <- as.Date(paste0(var, " ", year), '%a %b %d %Y')
  return(var)
}

其中:

  1. var - 数据表中的变量(即'日期')
  2. 年 - 您需要的年份
  3. 示例:

    yours_df$date <- conv_date(yours_df$date, 2018)