gpt4 book ai didi

R 日期时间转换 - lapply 和 unlist 正在转换为纪元后的天数

转载 作者:行者123 更新时间:2023-12-05 03:10:28 26 4
gpt4 key购买 nike

我正在为看起来像 12/8/12 的日期转换字符串,可能以一种相当迂回的方式通过 1) 在日期和月份数字中添加前导零(零填充),然后在我编写的自定义函数中使用 as.Date 函数转换为日期对象。

date_conversion <-  function(date_string){
split <- unlist(strsplit(date_string, "/"))
split[1] = str_pad(split[1], 2, pad = "0")
split[2] = str_pad(split[1], 2, pad = "0")
t = as.Date(paste(split, collapse = "/"),format='%m/%d/%y')
return (t)
}

非常令人困惑的是,当我在一个输入上调用该函数时,我可以取回我认为我想要的结果:

> date_conversion(test[1])
[1] "2012-12-12"
> typeof(date_conversion(test[1]))
[1] "double"

然后当我使用 lapply 时,它返回这个字符串表示:

    > lapply(test, date_conversion)
[[1]]
[1] "2012-12-12"

[[2]]
[1] "2015-12-12"

[[3]]
[1] "2015-09-09"

然后当我调用 unlist 时,日期会更改为自纪元以来的天数:

 unlist(lapply(test, date_conversion))
[1] 15686 16781 16687

我猜日期的底层表示是自纪元以来的天数(因此 typeof 返回 double 值,但为什么列表值会以更易读的格式显示日期,然后调用 unlist 让他们回到从纪元形成以来的今天?

此外,有没有一种优雅的方式可以让我进行这样的转换?也许我不应该使用 Lapply?

最佳答案

lubridate包还有另一种解决方案:

test <- c("12/8/12", "1/1/13", "2/4/13")

dates <- lubridate::mdy(test)
##[1] "2012-12-08" "2013-01-01" "2013-02-04"

class(dates)
##Date[1:3], format: "2012-12-08" "2013-01-01" "2013-02-04"

str(dates)
##[1] "Date"

lubridate 函数 mdy() 将对象 test 中的字符串转换为月 (m)、日 (d) 和年 ( y)。如果你的对象 test 是一个列表,与 aichao 写的相同的答案,可以使用 lubridate::mdy((unlist(test))

关于R 日期时间转换 - lapply 和 unlist 正在转换为纪元后的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39693731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com