我有数据.表包含大约300万行和40列.我想在组内按降序对该表进行排序,如以下sql模拟代码:
sort by ascending Year, ascending MemberID, descending Month
在数据中是否有一种等效的方法.桌子怎么做?到目前为止,我必须将其分解为两个步骤:
setkey(X, Year, MemberID)
这非常快,只需几秒钟.
X <- X[,.SD[order(-Month)],by=list(Year, MemberID)]
这一步需要更长的时间(5分钟).
更新:
user system elapsed
5.560 11.242 66.236
我的方法:setkey()然后order(-Month)
user system elapsed
816.144 9.648 848.798
我现在的问题是:如果我想按年份、MemberId和排序后的月份(Year、MemberId、Month)进行汇总,则不需要数据.表识别排序顺序吗?
更新2:回复Matthew Dowle:
在设置了年份、成员ID和月份之后,每个组仍然有多个记录.我想 for each 小组总结一下.我的意思是:如果我使用X[order(Year,MemberID,Month)],那么求和是否利用了数据的二进制搜索功能.表:
monthly.X <- X[, lapply(.SD[], sum), by = list(Year, MemberID, Month)]
更新3:Matthew D提出了几种方法.第一种方法的运行时间比order()方法快:
user system elapsed
7.910 7.750 53.916
马修:让我惊讶的是,转换月份符号花了大部分时间.没有它,setkey的速度很快.