Eu tenho um dataframe como mostrado abaixo
startdate <-c('10/29/2318 11:43','10/29/2311 11:43','11/19/2108 11:43')
employ <- data.frame(startdate)
Estou tentando extrair os date,datetime and time
componentes. Apesar de ser bem-sucedido date and datetime
, por algum motivo a mesma operação não funciona bem para time
extração.
Por favor, encontre meu código abaixo
transform_dates = function(DF){
DF %>%
mutate(measurement_date = as.Date(startdate,format = "%m/%d/%Y %H:%M")) %>%
mutate(measurement_datetime = format(as.POSIXct(startdate,format="%m/%d/%Y %H:%M"),"%Y-%m-%d %T")) %>%
mutate(measurement_time = format(as.POSIXct(startdate,"%m/%d/%Y %H:%M"),"%H:%M")) # also tried with `%T`
}
# the code throws error in `measurement_time` line
transform_dates(employ)
Recebo o resultado abaixo com sucesso para duas colunas
Você pode me ajudar a entender por que o mesmo format
método não funciona para measurement_time
coluna? em vez disso, recebo este erro
Erro em as.POSIXlt.character (as.character (x), ...): a string de caracteres não está em um formato não ambíguo padrão
Mas espero que minha saída tenha outra coluna chamada measurement_time
coluna também, que será semelhante à mostrada abaixo
Converta-o uma vez para datetime e use as.Date
e format
para obter a data e a hora respectivamente
library(dplyr)
transform_dates = function(DF){
DF %>%
mutate(measurement_datetime = as.POSIXct(startdate, format = "%m/%d/%Y %H:%M"),
measurement_date = as.Date(measurement_datetime),
measurement_time = format(measurement_datetime, "%T"))
}
transform_dates(employ)
# startdate measurement_datetime measurement_date measurement_time
#1 10/29/2318 11:43 2318-10-29 11:43:00 2318-10-29 11:43:00
#2 10/29/2311 11:43 2311-10-29 11:43:00 2311-10-29 11:43:00
#3 11/19/2108 11:43 2108-11-19 11:43:00 2108-11-19 11:43:00
A razão pela qual a tentativa de OP não funcionou é porque eles estavam perdendo o format
argumento na as.POSIXct
última chamada. O segundo argumento está tz
em as.POSIXct
por padrão, a menos que seja explicitamente mencionado. Além disso, não precisamos de várias mutate
instruções aqui. Assim, integrando as mudanças acima, funciona o seguinte.
employ %>%
mutate(measurement_date = as.Date(startdate,format = "%m/%d/%Y %H:%M"),
measurement_datetime = format(as.POSIXct(startdate,format="%m/%d/%Y %H:%M"),"%Y-%m-%d %T"),
measurement_time = format(as.POSIXct(startdate,format = "%m/%d/%Y %H:%M"),"%H:%M"))
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras