【发布时间】:2012-07-11 15:00:43
【问题描述】:
由于时间限制,我决定在我的代码中使用数据表而不是数据帧,因为它们要快得多。但是,我仍然想要数据框的功能。我需要合并两个数据表,保留所有值(例如在合并中设置 all=TRUE)。
一些示例代码:
> x1 = data.frame(index = 1:10)
> y1 = data.frame(index = c(2,4,6), weight = c(.2, .5, .3))
> x1
index
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
> y1
index weight
1 2 0.2
2 4 0.5
3 6 0.3
> merge(x,y, all=TRUE)
index weight
[1,] 1 NA
[2,] 2 1
[3,] 3 NA
[4,] 4 2
[5,] 5 NA
[6,] 6 3
[7,] 7 NA
[8,] 8 NA
[9,] 9 NA
[10,] 10 NA
现在我可以对数据表做类似的事情吗? (NA不一定要留下来,反正我把它们改成0)。
> x2 = data.table(index = 1:10, key ="index")
> y2 = data.table(index = c(2,4,6), weight= c(.3,.5,.2))
我知道你可以合并,但我也知道有更快的方法。
【问题讨论】:
-
我过去曾思考过这个问题,但从未找到答案。我认为FAQ 也没有解决这个问题,或者我太密集了,看不到它在哪里被覆盖。当我需要这样做时,我总是使用
merge()... -
另外,
merge.data.table在最近的版本中得到了加速。所以现在使用merge()与X[Y]的惩罚(嗯,应该)要少得多。输入data.table:::merge.data.table以查看在内部使用X[Y]的工作原理。 -
@MatthewDowle - 啊,是的,我已经阅读了几次,但它并没有真正点击。看到这个例子和下面的答案,一切都变得圆满了。干杯。
标签: r data.table