R Изменить дату отметки времени в зависимости от часа - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть серия временных меток, и я хочу создать новую переменную со значениями, которые имеют значение часа после 9 утра, которое будет изменено на дату следующего дня.Если это до 9 утра, дата останется прежней.

2018-5-11 01:57:00  would remain 2018-05-11
2018-5-11 11:15:00  would change to 2018-5-12

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Это решение отвечает на ваш вопрос, однако, возможно, стоит подумать о написании кода, который бы не изменял исходные данные;разработка / извлечение новых переменных (например, часов дня, «после 9 часов утра» или «нет» и т. д.) для последующей агрегации / поднабора может упростить разработку и пересмотр кода (особенно если вы переходите от конца к началусценарий часто).

timestamps <- as.POSIXct(c('2018-5-11 01:57:00','2018-5-11 11:15:00'), "%Y-%m-%d %H:%M:%S")
mask <- as.integer(format(timestamps, "%H")) > 9
timestamps <- as.Date(timestamps)
timestamps[mask] <- timestamps[mask] + 1
timestamps
[1] "2018-05-11" "2018-05-12"
0 голосов
/ 04 декабря 2018

Ответ зависит от того, как хранятся ваши метки времени, но давайте предположим, что они имеют тип "POSIXct" "POSIXt", как, например, создано lubridate::ymd_hms.

Тогда мы можем использовать lubridate и dplyr,Обратите внимание на использование dplyr::if_else для предотвращения преобразования дат в числовые.

library(lubridate)
library(dplyr)

data.frame(dttm = ymd_hms(c("2018-5-11 11:15:00", 
                            "2018-5-11 01:57:00"))) %>% 
  mutate(hr = hour(dttm),
         dt = if_else(hr > 9, as_date(dttm + days(1)), as_date(dttm)))

Результат:

                 dttm hr         dt
1 2018-05-11 11:15:00 11 2018-05-12
2 2018-05-11 01:57:00  1 2018-05-11
0 голосов
/ 04 декабря 2018
library(lubridate)
library(data.table)

setDT(df)

df$timestamp_cast <- ymd_hms(df$yourtimestamp_col)
df$desired_col <- NA
df[hour(timestamp_cast) < 9, desired_col := as.Date(timestamp_cast)]
df[hour(timestamp_cast) >= 9, desired_col := as.Date(timestamp_cast)+1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...