如何在2019年7月1日星期一12:00:00:000 AM

时间:2019-10-08 13:09:17

标签: r date time strsplit

我已经阅读,研究和测试了,但我只是不明白。这是我的数据框:

                               MyDate TEMP1 TEMP2
Monday, July 1, 2019 12:00:00:000 AM  90.0  1586

Monday, July 1, 2019 12:01:00:000 AM  88.6  1581

Monday, July 1, 2019 12:02:00:000 AM  89.4  1591

Monday, July 1, 2019 12:03:00:000 AM  90.5  1586

我需要将其与第二个数据帧进行比较:

   Date     Time A.B.Flow A.B.Batch.Volume

7/1/2019 14:47:46      1.0              2.0

7/9/2019 14:47:48      3.0              5.0

7/11/2019 14:47:52      0.0              2.0

7/17/2019 14:48:52      3.8              4.0

7/24/2019 14:49:52      0.0              3.1

当分钟日期,小时和分钟匹配时,我只需要合并两个数据框。秒数不必匹配。

到目前为止,我已经了解到我需要将第一列MyDate转换为单独的日期和时间。我一直无法提出一个实际执行此操作的strsplit命令。

这只是给每个元素加上引号:

Tried, newdate <- strsplit(testdate$MyDate, "\\s+ ")[[3]]    

这更好,但是“ 2019”不见了:

Tried, newdate <- strsplit(testdate$MyDate, "2019")           

它看起来像这样:

[1] "Monday, July 1, " "12:00:00:000 AM" 

[[2]]
[1] "Monday, July 1, " "12:01:00:000 AM" 

[[3]]
[1] "Monday, July 1, " "12:02:00:000 AM" 

[[4]]
[1] "Monday, July 1, " "12:03:00:000 AM" 

请告诉我我在做什么错。对于我是否在吠错树上,我希望提供一些输入信息。

我已经尝试过随时使用lubridate进行其他操作,但是我一直回到日期和时间的结合,并将当天记为我的宿敌。

2 个答案:

答案 0 :(得分:0)

这可能会给您一个提示:

因为有时间,所以您不应该将日期用作POSIXct,恕我直言。

x=c("Monday, July 1, 2019 12:00:00:000 AM 90.0 1586")
Months=c("January","February","March","April","May","June","July","August","September","October","November","December")


GetDate=function(x){
x=str_remove_all(x,",")#get rid of the
mo=which(Months==word(x,2))
day=word(x,3)
year=word(x,4)
time=word(x,5)
as.POSIXct(paste(paste(year,mo,day,sep="-"),time))
  }

GetDate(x)

答案 1 :(得分:0)

您可以通过以下方式摆脱MyDate字段中的日期(星期一,...),方法是在“,”上分割,删除第一个元素,然后合并其余元素并转换为POSIXCt。

假设您的第一个数据帧称为df:

dt <- strsplit(df$MyDate, ',')
df$MyDate2 <- sapply(dt, function(x) trimws(paste0(x[-1], collapse = ',')))
df$MyDate2 <- as.POSIXct(df$MyDate2, format = '%b %d, %Y %H:%M:%S')

由于您对时间戳的秒部分不感兴趣,因此可以执行以下操作:

df$MyDate2 <- format(df$MyDate2, '%Y-%m-%d %H:%M')

您应该类似地转换第二个数据帧df2的日期/时间字段,在其中创建MyDate2字段,并删除秒部分,如上所述。

现在,您可以合并MyDate2列上的两个数据框。