【发布时间】:2014-11-07 04:56:43
【问题描述】:
这个问题是关于代码性能的。我有一个包含两列的数据框:
-
DATE以MMDDYYYY格式表示为数字 -
EPOCH表示从午夜开始以 5 分钟为增量的时间。EPOCH计数从 0 开始 - 所以 00:00 到 00:05 将是 0,00:05 到 00:10 将是 1,依此类推。
我的数据框中有大约 1500 万行数据。作为处理这些数据的一部分,我将这两列转换为 R 的 Date 和 POSIXct 格式。我正在使用dplyr - 但是,我的代码花费的时间太长(大约 30 分钟)。下面我正在生成一个玩具数据集并提供我正在使用的代码:
library(dplyr)
DATA <- data.frame(DATE = rep(10082013,15000000), EPOCH = rep(6,15000000))
这是数据的示例视图
DATA %>%
head()
DATE EPOCH
1 10082013 6
2 10082013 6
3 10082013 6
4 10082013 6
5 10082013 6
6 10082013 6
这是我将数据转换为我想要的格式的部分:
DATA %>%
mutate(DATE_FORMATTED = as.Date(as.character(DATE), "%m%d%Y")) %>%
mutate(DOW = weekdays(DATE_FORMATTED)) %>%
mutate(TIME_FORMATTED = strftime(as.POSIXct(((EPOCH+1)*5*60), origin=as.character(DATE_FORMATTED), tz="UTC"), format="%R", tz="UTC")) %>%
head()
我觉得开销是由于TIME_FORMATTED 公式中的所有强制。有没有办法更快地达到最终结果?也许是 dplyr 优化的不同功能?
【问题讨论】:
-
你为什么要在最后一个
mutate中强制DATE_FORMATTED回到character?根据文档,origin无论如何都会被强制转换为Date。 -
是的 - 最后一个 mutate 语句中的原始字符强制转换确实是多余的。
-
好的 - 我明白我为什么要使用它了。我对
strptime和strftime这两个函数感到困惑。前者需要强制,而后者不需要。但是,代码仍然很慢。 :( -
我们目前没有针对日期时间优化的 dplyr 函数,但它在我的雷达上
-
@hadley:有没有列出针对
mutate优化的函数的文档?
标签: r performance datetime dplyr large-data