【问题标题】:How to work with POSIXlt in R如何在 R 中使用 POSIXlt
【发布时间】:2016-11-13 22:50:06
【问题描述】:

我正在尝试对已加载到 R 中的 csv 文件进行一些分析。我正在执行以下操作以通过 test[[3]][[1]] 访问特定值,例如获取特定值:

test <- read.csv(file = "test.csv")
test <- data.frame(lapply(test, as.character), stringsAsFactors=FALSE)

否则我会得到这样的东西:

> chicago[[3]][[1]]
[1] 08/02/2002 11:00:00 AM
19747 Levels: 01/01/2001 03:49:00 AM 01/01/2001 06:17:00 PM 01/01/2001 12:00:00 AM ... 12/31/2015 11:46:00 AM

由于一列正在保存日期,因此我将其转换为 POSIXlt。

test[[3]] <- strptime(test[[3]], format='%m/%d/%Y %I:%M:%S %p') 

现在正在按预期更改值,例如:

01/28/2004 06:30:00 PM -> 2004-01-28 18:30:00

现在尝试访问这些值,但我意识到,例如 test[[3]][[1]] 并没有给出具体的日期——相反,我得到了一个包含每一行每一秒的列表。

测试了一下,发现POSIXit类型有点“不同”;意思是上面提到的值似乎是某种列表,是这样的:

> unlist(unclass(value))
   sec    min   hour   mday    mon   year   wday   yday  isdst   zone gmtoff 
   "0"    "0"   "11"    "2"    "7"  "102"    "5"  "213"    "1" "CEST"     NA 

所以我的问题是:有没有办法获得像“2004-01-28 18:30:00”这样的值,而不是整个列的列表?

【问题讨论】:

  • 是否有特定的理由使用POSIXlt 而不是POSIXct(我更喜欢日期时间)?

标签: r date time posixlt


【解决方案1】:

你让你的生活变得太艰难了。您可以将整列解析为日期或日期时间。不需要lapply

您(通常)不希望POSIXlt 代表。查看现有的包,例如我的(相对较新的)anytime 包(也是on CRAN),它甚至可以为您从factor 转换——并且不需要明确的格式字符串、原始值或其他保留。

但由于您的帖子不包含reproducible example,因此我无法提供更具体的步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 2019-06-03
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多