#r
Вопрос:
Как удалить время из столбцов Даты и времени в фрейме данных, упомянутом ниже:
gt; structure(list(hhenrid = c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 10L, 11L, 12L, 13L, 14L, 15L, 18L, 19L, 20L, 21L, 22L, 23L, 24L), dob = c("1/1/1970 12:00:00 AM", "1/1/1976 12:00:00 AM", "1/1/1983 12:00:00 AM", "1/1/1980 12:00:00 AM", "12/31/1966 12:00:00 AM", "1/1/1990 12:00:00 AM", "1/1/1993 12:00:00 AM", "1/1/1959 12:00:00 AM", "12/31/1984 12:00:00 AM", "12/31/1969 12:00:00 AM", "12/31/1968 12:00:00 AM", "1/1/1979 12:00:00 AM", "12/31/1958 12:00:00 AM", "12/31/1986 12:00:00 AM", "1/1/1978 12:00:00 AM", "12/31/1987 12:00:00 AM", "12/31/1987 12:00:00 AM", "12/31/1967 12:00:00 AM", "12/31/1993 12:00:00 AM", "1/1/1953 12:00:00 AM"), voedate = c("7/28/2018 12:00:00 AM", "7/24/2018 12:00:00 AM", "7/24/2018 12:00:00 AM", "8/3/2018 12:00:00 AM", "7/22/2018 12:00:00 AM", "8/3/2018 12:00:00 AM", "7/23/2018 12:00:00 AM", "7/24/2018 12:00:00 AM", "7/10/2018 12:00:00 AM", "7/30/2018 12:00:00 AM", "7/30/2018 12:00:00 AM", "7/20/2018 12:00:00 AM", "7/24/2018 12:00:00 AM", "7/27/2018 12:00:00 AM", "7/31/2018 12:00:00 AM", "7/18/2018 12:00:00 AM", "7/27/2018 12:00:00 AM", "8/1/2018 12:00:00 AM", "8/1/2018 12:00:00 AM", "8/1/2018 12:00:00 AM")), row.names = c(NA, 20L), class = "data.frame")
Я пытаюсь с помощью этого кода удалить время из столбцов Даты и времени:
hh111$doblt;-format(as.POSIXct(hh111$dob, format = '%d/%m/%Y %H:%M:%S'), format = '%d/%m/%Y')
Но он показывает только даты, которые имеют 01/01/ГГГГ и NA для других значений. Нужна помощь, чтобы удалить время из обоих столбцов Даты и времени, т. Е. dob и voedate.
Комментарии:
1. Ваш
dob
, похоже, в формате mdy, но вы пытаетесь использовать формат dmy в своемas.POSIXct
звонке. Изменение этого наformat(as.POSIXct(hh111$dob, format = '%m/%d/%Y %H:%M:%S'), format = '%d/%m/%Y')
должно дать вам то, что вы хотите.
Ответ №1:
Одним из способов было бы использовать str_split
:
library(tidyverse) dat %gt;% mutate(across(c(dob, voedate), ~str_split(., " ", simplify=T)[,1]))
hhenrid dob voedate 1 2 1/1/1970 7/28/2018 2 3 1/1/1976 7/24/2018 3 4 1/1/1983 7/24/2018 4 5 1/1/1980 8/3/2018 5 6 12/31/1966 7/22/2018 6 7 1/1/1990 8/3/2018 7 8 1/1/1993 7/23/2018 8 10 1/1/1959 7/24/2018 9 11 12/31/1984 7/10/2018 10 12 12/31/1969 7/30/2018 11 13 12/31/1968 7/30/2018 12 14 1/1/1979 7/20/2018 13 15 12/31/1958 7/24/2018 14 18 12/31/1986 7/27/2018 15 19 1/1/1978 7/31/2018 16 20 12/31/1987 7/18/2018 17 21 12/31/1987 7/27/2018 18 22 12/31/1967 8/1/2018 19 23 12/31/1993 8/1/2018 20 24 1/1/1953 8/1/2018
Ответ №2:
Превращение их в даты также сократит время:
library(dplyr) df1 %gt;% mutate(across(c(dob, voedate), ~ as.Date(., format("%m/%d/%Y")))) hhenrid dob voedate 1 2 1970-01-01 2018-07-28 2 3 1976-01-01 2018-07-24 3 4 1983-01-01 2018-07-24 4 5 1980-01-01 2018-08-03 5 6 1966-12-31 2018-07-22 6 7 1990-01-01 2018-08-03 7 8 1993-01-01 2018-07-23 8 10 1959-01-01 2018-07-24 9 11 1984-12-31 2018-07-10 10 12 1969-12-31 2018-07-30 11 13 1968-12-31 2018-07-30 12 14 1979-01-01 2018-07-20 13 15 1958-12-31 2018-07-24 14 18 1986-12-31 2018-07-27 15 19 1978-01-01 2018-07-31 16 20 1987-12-31 2018-07-18 17 21 1987-12-31 2018-07-27 18 22 1967-12-31 2018-08-01 19 23 1993-12-31 2018-08-01 20 24 1953-01-01 2018-08-01
Ответ №3:
library(lubridate) df$datetime lt;- lubridate::mdy_hms(df$voedate, tz="Europe/London")