相关疑难解决方法(0)

按升序/降序快速排序data.table

我有一个data.table,大约有300万行和40列.我想按照以下sql模拟代码中的组内降序对此表进行排序:

sort by ascending Year, ascending MemberID, descending Month 
Run Code Online (Sandbox Code Playgroud)

在data.table中是否有相同的方法来执行此操作?到目前为止,我必须将其分解为两个步骤:

setkey(X, Year, MemberID)
Run Code Online (Sandbox Code Playgroud)

这非常快,只需几秒钟.

X <- X[,.SD[order(-Month)],by=list(Year, MemberID)]
Run Code Online (Sandbox Code Playgroud)

这个步骤需要更长的时间(5分钟).

更新:有人发表评论X <- X[sort(Year, MemberID, -Month)]并稍后删除.这种方法似乎要快得多:

user  system elapsed 
5.560  11.242  66.236 
Run Code Online (Sandbox Code Playgroud)

我的方法:setkey()然后订购(-Month)

   user  system elapsed 
816.144   9.648 848.798 
Run Code Online (Sandbox Code Playgroud)

我现在的问题是:如果我想按年份,MemberId和sort(Year,MemberID,Month)之后的月份进行汇总,data.table是否会识别排序顺序?

更新2:回应Matthew Dowle:

在使用Year,MemberID和Month的setkey之后,每组仍然有多个记录.我想要的是总结每个小组.我的意思是:如果我使用X [order(Year,MemberID,Month)],求和是否利用data.table的二进制搜索功能:

monthly.X <- X[, lapply(.SD[], sum), by = list(Year, MemberID, Month)]
Run Code Online (Sandbox Code Playgroud)

更新3:Matthew D提出了几种方法.第一种方法的运行时间比order()方法快:

   user  system elapsed 
  7.910   7.750  53.916 
Run Code Online (Sandbox Code Playgroud)

马修:让我感到惊讶的是大部分时间转换月份的标志.没有它,setkey的速度非常快.

performance r data.table

51
推荐指数
2
解决办法
4万
查看次数

通过变量列名来订购data.table

我想通过一个包含列名的变量来订购data.table:

我已经尝试了eval/get/c的每个组合而没有成功:

我有 colVar = 'someColumnName'

我想将此应用于: DT[order(colVar)]

variables r data.table

8
推荐指数
2
解决办法
4364
查看次数

如何使用R中的多列向量对data.table进行排序

我对R很新,并尝试构建一个比较两个数据集的函数,为了做到这一点,我需要在多列上对数据表进行排序.我相信在某处会有一些帮助,但我不知道如何搜索为了它.到目前为止这是我的方法:

DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
#column vector
keycol <-c("x","y")

DT[order(keycol)]
   x y v
1: b 1 1
2: b 3 2
Run Code Online (Sandbox Code Playgroud)

不知何故它只显示2行并删除其他记录.但如果我这样做:

> DT[order(x,y)]
   x y v
1: a 1 4
2: a 3 5
3: a 6 6
4: b 1 1
5: b 3 2
6: b 6 3
7: c 1 7
8: c 3 8
9: c 6 9
Run Code Online (Sandbox Code Playgroud)

它就像流体一样.任何人都可以帮助使用列名矢量进行排序,任何帮助将不胜感激.

r data.table data-science

4
推荐指数
1
解决办法
3670
查看次数

标签 统计

data.table ×3

r ×3

data-science ×1

performance ×1

variables ×1