data.table 1.8.11和聚合问题

时间:2014-01-29 16:55:57

标签: r data.table

更新:BUG已修复。见下文。


这是我在data.table 1.8.11(r1101,2014-01-28)中发现的一些有趣的行为。 by子句中包含的变量的顺序会更改聚合的结果:

>   foo = data.table(a=rep(c(0,1,0,1),2), b=rep(c(T,T,F,F),2), c=c(1,1,1,1,1,1,1,1))
>   foo
   a     b c
1: 0  TRUE 1
2: 1  TRUE 1
3: 0 FALSE 1
4: 1 FALSE 1
5: 0  TRUE 1
6: 1  TRUE 1
7: 0 FALSE 1
8: 1 FALSE 1
>   foo[, .N, by=list(b, a)]
       b a N
1:  TRUE 0 1
2:  TRUE 1 1
3: FALSE 0 1
4: FALSE 1 1
5:  TRUE 0 1
6:  TRUE 1 1
7: FALSE 0 1
8: FALSE 1 1
>   foo[, .N, by=list(a, b)]
   a     b N
1: 0  TRUE 2
2: 1  TRUE 2
3: 0 FALSE 2
4: 1 FALSE 2
> 

在data.table(1.8.10)的稳定版本中不会发生这种情况。

1 个答案:

答案 0 :(得分:4)

感谢您的举报。现在已在v1.8.11 commit 1103中修复此问题。来自NEWS

  

o修复了由于最近对fastorder的修复而产生的错误,其中聚合逻辑类型有时会导致错误的结果。关闭#5307。感谢Clayton Stanley报告SO:data.table 1.8.11 and aggregation issues


require(data.table) # commit 1103 v1.8.11
foo[, .N, by=list(b,a)]
       b a N
1:  TRUE 0 2
2:  TRUE 1 2
3: FALSE 0 2
4: FALSE 1 2

foo[, .N, by=list(a,b)]
   a     b N
1: 0  TRUE 2
2: 1  TRUE 2
3: 0 FALSE 2
4: 1 FALSE 2