我正在学习如何使用data.table
而我遇到了一个意想不到的问题。我有一个大数据集all
,有几个索引,21列和~20K行。我将all
聚合为2个索引列,并将其命名为fail
。当我尝试使用all
过滤fail
行时,如果失败中的索引是all
中的前两个索引,我只会成功。事实并非如此。如何告诉data.table忽略all
fail
不共享的set.seed(42)
all<-data.table(rep= rep(1:2, each=15, 10),
loc= rep(letters[1:15], 20),
foo= sample(LETTERS),
x=rnorm(n=300))
setkey(all, rep, loc, foo) #note that foo is last instead of 2nd, which would be its desired default position
fail<- all[,sum(x) < -5, by=list(rep,loc)]
setkey(fail, rep,loc)
fail[V1==T]
rep loc V1
1: 2 d TRUE
中的索引?
all[fail[V1==T]]
rep loc foo x V1
1: 1 f A -0.46972958 TRUE
2: 1 f B 0.18819303 TRUE
3: 1 f C -0.65850343 TRUE
4: 1 f D -0.88577630 TRUE
5: 1 f I 0.08489806 TRUE
6: 1 f K -2.44046693 TRUE
7: 1 f R -0.43144620 TRUE
8: 1 f T 1.81522845 TRUE
9: 1 f U -1.01759612 TRUE
10: 1 f W -2.11320011 TRUE
setkey(all, rep, foo, loc) #foo moved from last to 2nd key
all[fail[V1==T]]
rep foo loc x V1
1: 2 d NA NA TRUE
{{1}}
答案 0 :(得分:1)
我假设您不想重新键入all
表(尽管这也可以解决问题)。使用data.table::merge
做你想做的事吗?
merge(all, fail[V1==T], by = c("rep", "loc"))