【发布时间】:2017-08-23 23:39:26
【问题描述】:
首先,一个可重现的例子。我正在使用 data.table,因为我正在处理大约 2000 万行 -
> require(data.table)
> x <- structure(list(DoM = c(2011241L, 2015359L, 2016352L, 2015360L,
2015287L, 2014038L, 2017066L, 2012227L, 2015041L, 2015295L),
Year = c(2011L, 2015L, 2016L, 2015L, 2015L, 2014L, 2017L,
2012L, 2015L, 2015L), Month = c(8L, 12L, 12L, 12L, 10L, 2L,
3L, 8L, 2L, 10L)), .Names = c("DoM", "Year", "Month"), row.names = c(NA,
-10L), class = c("data.table", "data.frame"))
> x
DoM Year Month
1: 2011241 2011 8
2: 2015359 2015 12
3: 2016352 2016 12
4: 2015360 2015 12
5: 2015287 2015 10
6: 2014038 2014 2
7: 2017066 2017 3
8: 2012227 2012 8
9: 2015041 2015 2
10: 2015295 2015 10
我需要从 DoM 列中提取日期,其中包含类似 Julian 格式的日期。 DoM 列的每个元素的格式为yyyyddd,其中ddd 是一年中的某一天yyyy(因此是1 <= ddd <= 366)。
例如第一个日期是2011-08-29,因为它对应于2011的第241st天
我目前对我所拥有的并不满意,那就是-
x[, Date:=as.Date((DoM-1000*Year)-1, origin=paste(Year,1,1,sep='-'))]
我怀疑paste 效率低下,正在寻找任何可能更好的替代方案。
【问题讨论】:
标签: r performance data.table