如何拆分 2019 年 7 月 1 日星期一 12:00:00:000 AM
How to split Monday, July 1, 2019 12:00:00:000 AM
我已经阅读、学习和测试了,但就是不明白。这是我的数据框:
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"
请告诉我我做错了什么。我很想知道我是否找错了树。
我已经尝试使用 anytime 和 lubridate 做一些其他的事情,但我一直回到这个组合的日期和时间,把那一天写成我的克星。
这可能会给你一个提示:
既然你有时间,你不应该使用as.Date而是as.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)
您可以通过拆分“,”删除第一个元素,然后组合其余元素并转换为 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')
由于您对时间戳的秒部分不感兴趣,您可以这样做:
df$MyDate2 <- format(df$MyDate2, '%Y-%m-%d %H:%M')
您应该类似地转换第二个数据帧 df2 的 Date/Time 字段,在那里创建一个 MyDate2 字段,并如上所述删除秒部分。
现在您可以合并 MyDate2 列上的两个数据框。
我已经阅读、学习和测试了,但就是不明白。这是我的数据框:
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"
请告诉我我做错了什么。我很想知道我是否找错了树。
我已经尝试使用 anytime 和 lubridate 做一些其他的事情,但我一直回到这个组合的日期和时间,把那一天写成我的克星。
这可能会给你一个提示:
既然你有时间,你不应该使用as.Date而是as.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)
您可以通过拆分“,”删除第一个元素,然后组合其余元素并转换为 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')
由于您对时间戳的秒部分不感兴趣,您可以这样做:
df$MyDate2 <- format(df$MyDate2, '%Y-%m-%d %H:%M')
您应该类似地转换第二个数据帧 df2 的 Date/Time 字段,在那里创建一个 MyDate2 字段,并如上所述删除秒部分。
现在您可以合并 MyDate2 列上的两个数据框。