Как разделить Понедельник, 1 июля 2019 года 12: 00: 00: 000 AM - PullRequest
1 голос
/ 08 октября 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 в отдельные даты и время. Я не смог придумать команду 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, но я продолжаю возвращаться к этой объединенной дате и времени с написанным днемкак мой заклятый враг.

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Вы можете избавиться от дня (понедельник, ...) в своем поле 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.

0 голосов
/ 08 октября 2019

Это может дать вам подсказку:

Поскольку у вас есть время, вы должны использовать не как .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)
...