R帮助转换日期时间
您好,我在df中有以下列,希望将它们转换为相同类型的日期格式。这样我就可以创建一个新的col Duration,其中需要“End.Date.Time”-“Start.Date.Time”:R帮助转换日期时间,r,datetime,lubridate,R,Datetime,Lubridate,您好,我在df中有以下列,希望将它们转换为相同类型的日期格式。这样我就可以创建一个新的col Duration,其中需要“End.Date.Time”-“Start.Date.Time”: End.Date.Time Start.Date.Time 1/5/2018 12:14 20171125 1/5/2018 12:14 20171125 1/5/2018 12:14 20171125 30/5/2017 22:47 20170502 30/5/2017 22:47
End.Date.Time Start.Date.Time
1/5/2018 12:14 20171125
1/5/2018 12:14 20171125
1/5/2018 12:14 20171125
30/5/2017 22:47 20170502
30/5/2017 22:47 20170502
30/5/2017 22:47 20170502
我试过了
library(lubridate)
df %>% mutate(End.Date.Time = ymd_hms(End.Date.Time), Start.Date.Time = ymd_hms(Start.Date.Time))
out: All formats failed to parse. No formats found.
“Start.Date.Time”值都变为NA。
我该如何解决这个问题呢?基本的解决方法是
transform(df,
End.Date.Time = as.POSIXct(End.Date.Time, format = "%d/%m/%Y %H:%M"),
Start.Date.Time = as.POSIXct(as.character(Start.Date.Time), format = "%Y%m%d"))
# End.Date.Time Start.Date.Time
#1 2018-05-01 12:14:00 2017-11-25
#2 2018-05-01 12:14:00 2017-11-25
#3 2018-05-01 12:14:00 2017-11-25
#4 2017-05-30 22:47:00 2017-05-02
#5 2017-05-30 22:47:00 2017-05-02
#6 2017-05-30 22:47:00 2017-05-02
或者,如果您希望两列都作为日期,您可以这样做
transform(df,
End.Date.Time = as.Date(as.POSIXct(End.Date.Time, format = "%d/%m/%Y %H:%M")),
Start.Date.Time = as.Date(as.character(Start.Date.Time), format = "%Y%m%d"))
使用
lubridate
,我们可以使用函数dmy\u hm
和ymd
进行转换
library(dplyr)
library(lubridate)
df %>%
mutate(End.Date.Time = dmy_hm(End.Date.Time),
Start.Date.Time = as.POSIXct(ymd(Start.Date.Time)))
数据
df <- structure(list(End.Date.Time = structure(c(1L, 1L, 1L, 2L, 2L,
2L), .Label = c("1/5/2018 12:14", "30/5/2017 22:47"), class = "factor"),
Start.Date.Time = c(20171125L, 20171125L, 20171125L, 20170502L,
20170502L, 20170502L)), class = "data.frame", row.names = c(NA, -6L))
df如果您想坚持使用lubridate,下面的代码应该会有所帮助
df = structure(list(End.Date.Time = c("1/5/2018 12:14", "1/5/2018 12:14",
"1/5/2018 12:14", "30/5/2017 22:47",
"30/5/2017 22:47", "30/5/2017 22:47"),
Start.Date.Time = c(20171125L, 20171125L, 20171125L, 20170502L,
20170502L, 20170502L)),
.Names = c("End.Date.Time", "Start.Date.Time"),
row.names = c(NA, -6L), class = "data.frame")
df %>%
mutate(End.Date.Time = dmy_hm(End.Date.Time) %>% date, #dmy_hm outputs datetime.
Start.Date.Time = ymd(Start.Date.Time))
和。日期与基地也应该工作
df %>%
mutate(End.Date.Time = dmy_hm(End.Date.Time) %>% as.Date,
Start.Date.Time = ymd(Start.Date.Time))
大家好,非常感谢你们的解决方案。我做了以下工作,得到了我所需要的:
df$Duration <- as.Date((ymd_hms(df$End.Date.Time))) - (ymd(df$Start.Date.Time))
df$Duration您还可以Map
将每个列映射为输出格式-dat[]当我尝试您的建议时,我会得到End.Date.Time的NA值。@spidermarn使用我帖子中的数据,在我这边效果很好。你能用你的数据更新你的帖子吗dput(df)
或dput(head(df))
如果太长?当我尝试您的建议时,我会得到End.Date.Time的NA值。再次检查并运行。所以我不知道为什么<代码>日期
与其他软件包发生冲突?您可以尝试%%>%lubridate::date()
您也可以尝试使用基本系统中的as.date<代码>df%>%变异(End.Date.Time=as.Date(dmy_-hm(End.Date.Time))%>%as.Date,Start.Date.Time=ymd(Start.Date.Time))