Как ссылаться на часовой пояс (TZ) из отдельного столбца? - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь назначить правильный часовой пояс (TZ) для каждого наблюдения в моем наборе данных (Прикрепленный скриншот). Я успешно смог преобразовать столбцы TZ (Start_TimeZone) в новые столбцы (Start_TimeZone_New) для представления «обычных» обозначений TZ (т. Е. «America / Los_Angeles»). Проблема, с которой я сталкиваюсь, заключается в понимании того, как назначить этот новый столбец TZ для каждого наблюдения даты / времени (второй фрагмент кода). Конечная цель - использовать назначение TZ для расчета продолжительности между начальной и конечной датой / временем (конечная дата / время не показаны).

Start Date/Time Example

enter image description here

```
comp_report_tz %>% 
mutate(Start_TimeZone_New = case_when(is.na(Start_TimeZone) ~ "missing",
           Start_TimeZone == "-08:00" ~ "America/Los_Angeles",
           Start_TimeZone == "-07:00" ~ "America/Phoenix",
           Start_TimeZone == "-06:00" ~ "America/Chicago",
           Start_TimeZone == "-05:00" ~ "America/New_York",
                                       TRUE ~ "others")) %>% 
mutate(End_TimeZone_New = case_when(is.na(End_TimeZone) ~ "missing",
           Start_TimeZone == "-08:00" ~ "America/Los_Angeles",
           Start_TimeZone == "-07:00" ~ "America/Phoenix",
           Start_TimeZone == "-06:00" ~ "America/Chicago",
           Start_TimeZone == "-05:00" ~ "America/New_York",
                                       TRUE ~ "others"))
```

``` 
comp_report_adj %>% 
mutate(Start_Time_Final = as.POSIXct(comp_report_tz$Start_Date_Time, format = "%m/%d/%y 
%I:%M%p", tz=comp_report_adj$Start_TimeZone_New)
```

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020
sub_final_report <- comp_report_adj %>% 
  rowwise() %>% 
  mutate(Start_Date_Time2 = ymd_hms(Start_Date_Time, tz = Start_TimeZone_New)) %>% 
  mutate(End_Date_Time2 = ymd_hms(End_Date_Time, tz = End_TimeZone_New))
0 голосов
/ 19 февраля 2020

В пакете R lubridate есть некоторые функции, которые могут помочь.

library(magrittr)
library(lubridate)

assign_tz <- function(dt, tz){
  lubridate::tz(dt) <- tz
  return(dt)
}

tibble::tibble(end = lubridate::now(tz = "America/New_York"), tz_end = "America/New_York", 
               start = lubridate::as_datetime("2018-01-01", tz = "America/Chicago"), tz_start = "America/New_York"
               ) %>%
  dplyr::mutate(start_tz = assign_tz(start, tz_start), end_tz = assign_tz(end, tz_end), diff = end_tz - start_tz) 

Поскольку у вашего Start_Date_Time и времени окончания вашей даты есть часовые пояса, связанные с ними, вы сможете рассчитать продолжительность, как указано выше, вычитая дату начала и времени из даты и времени окончания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...