R 如何拆分2019年7月1日星期一上午12:00:00:000

R 如何拆分2019年7月1日星期一上午12:00:00:000,r,date,time,strsplit,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

我读过,研究过,测试过,但我就是不明白。这是我的数据框:

                               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 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]]    
请告诉我我做错了什么。我想知道我是不是找错人了


我用anytime和lubridate尝试了一些其他的方法,但我总是回到这个日期和时间的组合,并把这一天写为我的复仇女神。

这可能会给你一个提示:

既然您有时间,就不应该用作.Date,而应该用作.POSIXct,imho

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)

这可能会给你一个提示:

既然您有时间,就不应该用作.Date,而应该用作.POSIXct,imho

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)

您可以通过在“,”上拆分,删除第一个元素,然后合并其余元素并转换为POSIXCt,来删除MyDate字段中的日期(星期一,…)

假设您的第一个数据帧称为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')

dt您可以通过在“,”上拆分,删除第一个元素,然后合并其余元素并转换为POSIXCt,来删除MyDate字段中的日期(星期一,…)

假设您的第一个数据帧称为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')

是的,你找错人了。将
用作.Date
并使用适当的格式创建日期对象,以便进行比较。嗨,科里,谢谢您的输入。我找不到一个办法去约会来应付“星期一”。是的,你找错了人。将
用作.Date
并使用适当的格式创建日期对象,以便进行比较。嗨,科里,谢谢您的输入。我找不到一个办法来安排“星期一”的约会。谢谢你的建议。我仍然坚持第一点。当我使用你的第一行代码时,我得到:“星期一”“7月1日”“2019年12:03:00:000 AM”我很感激你提出的取消星期一的建议。我可以合乎逻辑地抛弃它。但是,代码还没有为我做到这一点。2019年被时间所束缚也是一个问题。我知道我可以在2019年的基础上进行拆分,但是我必须每年修改代码。而且那样看起来很乱。我缺少的是如何根据第一个逗号、第二个逗号和一个空格进行拆分。是的,但代码的第二行删除了“星期一”部分,然后将7月1日、2019年和时间部分组合在一起创建“2019年7月1日12:00:00 am”。第三行然后将其转换为POSIXct时间戳无需拆分as.POSIXct函数可以解析整个日期字符串:
as.POSIXct(“2019年7月1日星期一12:00:00:000 AM”,%a,%B%d,%Y%H:%M:%S:000%p”,tz=“”)
很好,谢谢@Dave2e。我不熟悉你提到的格式标志。但是,当我将AM更改为PM时,返回的time对象没有任何差异-我是否遗漏了什么?user2474226,谢谢!这很有效。我还可以使用您的示例转换其他数据帧。然后用一个简单的粘贴将每个data.frame中的日期和时间精确匹配。现在进入下一部分。再次感谢!谢谢你的建议。我仍然坚持第一点。当我使用你的第一行代码时,我得到:“星期一”“7月1日”“2019年12:03:00:000 AM”我很感激你提出的取消星期一的建议。我可以合乎逻辑地抛弃它。但是,代码还没有为我做到这一点。2019年被时间所束缚也是一个问题。我知道我可以在2019年的基础上进行拆分,但是我必须每年修改代码。而且那样看起来很乱。我缺少的是如何根据第一个逗号、第二个逗号和一个空格进行拆分。是的,但代码的第二行删除了“星期一”部分,然后将7月1日、2019年和时间部分组合在一起创建“2019年7月1日12:00:00 am”。第三行然后将其转换为POSIXct时间戳无需拆分as.POSIXct函数可以解析整个日期字符串:
as.POSIXct(“2019年7月1日星期一12:00:00:000 AM”,%a,%B%d,%Y%H:%M:%S:000%p”,tz=“”)
很好,谢谢@Dave2e。我不熟悉你提到的格式标志。但是,当我将AM更改为PM时,返回的time对象没有任何差异-我是否遗漏了什么?user2474226,谢谢!这很有效。我还可以使用您的示例转换其他数据帧。然后用一个简单的粘贴将每个data.frame中的日期和时间精确匹配。现在进入下一部分。再次感谢!