为什么我的脚本使用data.table比使用data.frame花费更多的时间(给出的示例)?

为什么我的脚本使用data.table比使用data.frame花费更多的时间(给出的示例)?,r,dataframe,dplyr,data.table,R,Dataframe,Dplyr,Data.table,我只是通过几列计算时间戳组的最大值,我的数据大小是50 GB,我尝试了data.frame和data.table,但是使用data.table(42分钟)比使用data.frame(24分钟)花费更多的时间。理想情况下,data.table应该更快(节省10-20倍的时间)。有人能告诉我我的剧本哪里出错了吗?这是一个简单的脚本,所以我没有创建任何示例,因为它只是关于我的脚本优化 使用Data.Frame Sys.time() “2020-01-11 16:46:25格林威治标准时间” df% 分

我只是通过几列计算时间戳组的最大值,我的数据大小是50 GB,我尝试了data.frame和data.table,但是使用data.table(42分钟)比使用data.frame(24分钟)花费更多的时间。理想情况下,data.table应该更快(节省10-20倍的时间)。有人能告诉我我的剧本哪里出错了吗?这是一个简单的脚本,所以我没有创建任何示例,因为它只是关于我的脚本优化

使用Data.Frame
Sys.time()
“2020-01-11 16:46:25格林威治标准时间”
df%
分组依据(客户、地点id、报告日期、时间)%>%
切片(哪个.max(创建时间))
系统时间()
“2020-01-11 17:10:20格林威治标准时间”
使用Data.Table
Sys.time()
“2020-01-11 17:36:43格林尼治标准时间”

DT_df如果我们想使用与
dplyr
中类似的代码,请使用
which.max
,使用
.I
获取行索引,提取(
$V1
)并使用它来对数据进行子集

i1 <- DT_mydata_0[, .I[which.max(created_time)],
        by=.(customer,location_id,report_date,hour)]$V1
DT_df2 <- DT_mydata_0[i1]

@科尔:最初,我在dyplr中使用了过滤器(x==max(x)),然后我使用which.max(x)来获得更快的结果……这里的V1是什么?@YogeshKumar这是什么faster@akrun:执行脚本时似乎出现错误。。错误:“by=(客户、地点、id、报告日期、小时)]$V1中出现意外符号​DT_df2“@akrun:是的,它很有魅力&非常快(不到50秒!),非常感谢。你能用data.table分享学习高级查询的链接吗?
Sys.time()
"2020 - 01 - 11 17:36:43 GMT"

DT_df <- DT_mydata_0[, created_time == max(created_time),
                     by = .(customer, location_id, report_date, hour)]

Sys.time()
"2020 - 01 - 11 18:17"
i1 <- DT_mydata_0[, .I[which.max(created_time)],
        by=.(customer,location_id,report_date,hour)]$V1
DT_df2 <- DT_mydata_0[i1]
setkey(DT_mydata_0, c('customer', 'location_id', 'report_date', 'hour', 'created_tiime'))
i1 <- DT_mydata_0[, .I[1], .(customer,location_id,report_date,hour)]$V1
DT_mydata_0[i1]