Изменение формата даты и времени в R с помощью POSIXct-класса

#r #posixct

Вопрос:

У меня есть два фрейма данных с датой/временем в разных форматах. Я хотел, чтобы моя дата встречи в df2 соответствовала формату в df1 (например: «1/1/21 00:00»). У меня нет времени для моих свиданий, поэтому можно отформатировать все время для моих свиданий в 00:00 (например: «1/1/21 будет 1/1/21 00:00″).

Мне сказали использовать векторы POSIXct-класса (временные метки) с использованием as.POSIXct(paste0(дата-время,»-00″), формат=»%m/%d/%Y %H:%M:%S»). Я новичок в Р. Как бы я мог использовать это с моими кадрами данных?

 df1 lt;- structure(list(UserID = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 1L),   Full.Name = c( "John Smith", "Jack Peters", "Bob Brown", "Jane Doe", "Jackie Jane", "Sarah Brown", "Chloe Brown", "John Smith" ),   Info = c("yes", "no", "yes", "yes", "yes", "yes", "no", "yes"),   EncounterID = c(13L, 14L, 15L, 16L, 17L, 18L, 19L, 13L), DateTime = c("1/2/21 00:00", "1/5/21 12:00", "1/1/21 1:31", "1/5/21 3:34", "5/9/21 5:33", "5/8/21 3:39", "12/12/21 2:30", "12/11/21 9:21"),   Temp = c("100", "103", "104", "103", "101", "102", "103", "105"),     misc = c("(null)", "no", "(null)", "(null)", "(null)","(null)", "(null)", "(null)"   )),   class = "data.frame", row.names = c(NA,   -8L))  df2 lt;- structure(list(UserID = c(1L, 2L, 3L, 4L, 5L, 6L),   Full.Name = c("John Smith", "Jack Peters", "Bob Brown", "Jane Doe", "Jackie Jane", "Sarah Brown"),   DOB = c("1/1/90", "1/10/90", "1/2/90", "2/20/80", "2/2/80", "12/2/80"),   EncounterID = c(13L, 14L, 15L, 16L, 17L, 18L), EncounterDate = c("1/1/21", "1/2/21", "1/1/21", "1/6/21", "5/7/21", "5/8/21"),   Type = c("Intro", "Intro", "Intro", "Intro", "Care", "Out"),   responses = c("(null)", "no",   "yes", "no", "no", "unsat")),     class = "data.frame", row.names = c(NA,   -6L))  

Ответ №1:

Обновление: Мы могли бы использовать lubridate пакеты mdy и as_datetime функции:

 library(dplyr) library(lubridate) df1 %gt;%   separate(DateTime, c("Date", "Time"), sep=" ") %gt;%   mutate(Date = as_datetime(mdy(Date))) %gt;%   select(-Time) %gt;%   as_tibble()  df2 %gt;%   mutate(across(c(DOB, EncounterDate), mdy)) %gt;%   mutate(across(c(DOB, EncounterDate), as_datetime)) %gt;%   as_tibble()  
 UserID Full.Name Info EncounterID Date Temp misc   lt;intgt; lt;chrgt; lt;chrgt; lt;intgt; lt;dttmgt; lt;chrgt; lt;chrgt;  1 1 John Smith yes 13 2021-01-02 00:00:00 100 (null) 2 2 Jack Peters no 14 2021-01-05 00:00:00 103 no  3 3 Bob Brown yes 15 2021-01-01 00:00:00 104 (null) 4 4 Jane Doe yes 16 2021-01-05 00:00:00 103 (null) 5 5 Jackie Jane yes 17 2021-05-09 00:00:00 101 (null) 6 6 Sarah Brown yes 18 2021-05-08 00:00:00 102 (null) 7 7 Chloe Brown no 19 2021-12-12 00:00:00 103 (null) 8 1 John Smith yes 13 2021-12-11 00:00:00 105 (null) gt;    UserID Full.Name DOB EncounterID EncounterDate Type   lt;intgt; lt;chrgt; lt;dttmgt; lt;intgt; lt;dttmgt; lt;chrgt; 1 1 John Smith 1990-01-01 00:00:00 13 2021-01-01 00:00:00 Intro 2 2 Jack Peters 1990-01-10 00:00:00 14 2021-01-02 00:00:00 Intro 3 3 Bob Brown 1990-01-02 00:00:00 15 2021-01-01 00:00:00 Intro 4 4 Jane Doe 1980-02-20 00:00:00 16 2021-01-06 00:00:00 Intro 5 5 Jackie Jane 1980-02-02 00:00:00 17 2021-05-07 00:00:00 Care  6 6 Sarah Brown 1980-12-02 00:00:00 18 2021-05-08 00:00:00 Out   

Комментарии:

1. Спасибо за публикацию. Похоже, вы все время удаляли? Я знаю, что у меня нет времени для df2, но мне нужно время в df2, даже если нам придется по умолчанию установить его на 00:00

2. Пожалуйста, ознакомьтесь с моим обновлением!:-)

3. Спасибо! Я вижу изменения в консоли, но я не вижу изменений, когда дважды щелкаю df2 в среде. Есть идеи о том, как также просматривать изменения в окружающей среде?

4. Поставить df1 lt;- перед df1

5. Я пытался это сделать. Он все равно не появится. Я даже попытался использовать другое имя, например df11 lt;- , вместо df1, и до сих пор не вижу новых результатов.