sta*_*ant 12 datetime r data.table
我正在使用新版本,data.table
特别是AWESOME fread
功能.我的文件包含作为字符串加载的日期(因为我不知道这样做),看起来像01APR2008:09:00:00
.
我需要梳理这些日期时间的data.table,然后排序是有效的投,然后IDateTime
格式(或任何ALSE我还不知道).
> strptime("01APR2008:09:00:00","%d%b%Y:%H:%M:%S")
[1] "2008-04-01 09:00:00"
> IDateTime(strptime("01APR2008:09:00:00","%d%b%Y:%H:%M:%S"))
idate itime
1: 2008-04-01 09:00:00
> IDateTime("01APR2008:09:00:00","%d%b%Y:%H:%M:%S")
Error in charToDate(x) :
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)
看起来我做不到DT[ , newType := IDateTime(strptime(oldType, "%d%b%Y:%H:%M:%S"))]
.
我的问题是:
IDateTime
从fread
,这样我可以排序后有效?Mat*_*wle 11
不幸的是(为了效率)strptime
产生一个POSIXlt类型,它不受支持,data.table
并且总是因为它的大小(每个日期40个字节!)和结构.虽然strftime
产生了更好的POSIXct,但它仍然通过POSIXlt实现.更多信息:
http://stackoverflow.com/a/12788992/403310
Run Code Online (Sandbox Code Playgroud)
寻找基本函数,例如as.Date
,它也使用strptime
,创建一个存储为double的epoch(奇怪)的整数偏移量.将IDate
在(朋友)班data.table
的目的是实现存储,嗯,整数整数划时代偏移.适合快速排序base::sort.list(method = "radix")
(实际上是一种计数排序).IDate
并不真正意图快速(通常是一次性)转换.
因此,要正确或错误地转换字符串日期/时间,我倾向于使用自己的帮助函数.
如果字符串日期是"2012-12-24"
我倾向于:as.integer(gsub("-", "", col))
并继续YYYYMMDD
整数日期.类似地,时间可以是HHMMDD
整数.两列:date
和time
分别是有用的,如果你一般要roll = TRUE
在一天之内,而不是前一天.按月分组简单快捷:by = date %/% 100L
.添加和减去天数很麻烦,但无论如何,因为您很少想要添加日历日,而不是工作日或工作日.无论如何,这是对您的工作日矢量的查找.
在您的情况下,角色月份需要转换为1:12
.您的日期"01APR2008"中没有分隔符,因此a substring
将是一种方式,后跟一个match
或fmatch
月份名称.你在控制文件格式吗?如果是这样,数字在一个明确的格式中更好,这种格式自然地排序,例如%Y-%m-%d
,或%Y%m%d
.
我还没有最好的做到这一点fread
,因此日期/时间保留为字符,因为我还不确定如何检测日期格式或输出哪种类型.它确实需要输出整数或双日期,而不是低效的字符.我怀疑我对YYYYMMDD
整数的使用被认为是非常规的,所以我有点犹豫要不要将它作为默认值.他们有自己的位置,也有基于时代的日期的利弊.日期不都总是被时代是基于所有我的建议.
你怎么看?顺便说一句,谢谢你的鼓励fread
; 很高兴看到.
归档时间: |
|
查看次数: |
2751 次 |
最近记录: |