2
此问题是关于代码性能的。我有两列的数据帧:在R-dplyr性能的大数据集中有效地格式化日期和时间
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。 – shadowtalker 2014-09-12 23:07:42
是的 - 最后的变异陈述中的原始字符强制确实是多余的。 – sriramn 2014-09-12 23:23:01
好的 - 我明白了我为什么使用它。我在两个函数'strptime'和'strftime'之间混淆了。前者要求强制,后者则不要。但是,代码仍然很慢。 :( – sriramn 2014-09-12 23:28:29