首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么data.table CJ不尊重列的主要顺序

为什么data.table CJ不尊重列的主要顺序
EN

Stack Overflow用户
提问于 2015-02-01 22:44:06
回答 1查看 327关注 0票数 6

这不仅仅是一个问题,我还想知道为什么data.table CJ函数返回的对象最右边的索引运行得更快(与基本expand.grid函数相反)。

举个例子:

代码语言:javascript
复制
CJ(a=letters[1:2],b=LETTERS[1:2])
#   a b
#1: a A
#2: a B
#3: b A
#4: b B
expand.grid(a=letters[1:2],b=LETTERS[1:2])
#  a b
#1 a A
#2 b A
#3 a B
#4 b B

我认为最左边的指数跑得更快是R。CJ有理由遵循另一个命令吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-03 16:46:31

像这样排序CJ的结果是很方便的,因为它可以被所有的列(它是这样的)键控,然后启用这样的操作:

代码语言:javascript
复制
dt = data.table(a = c(1,2,1), b = 1:3, c = c('a', 'a', 'b'))
setkey(dt, a, c)
#   a b c
#1: 1 1 a
#2: 1 3 b
#3: 2 2 a

dt[CJ(unique(a), unique(c))]
#   a  b c
#1: 1  1 a
#2: 1  3 b
#3: 2  2 a
#4: 2 NA b

# just checking the key:
key(dt[, CJ(unique(a), unique(c))])
#[1] "V1" "V2"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28268825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档