**编辑2019:***此问题是在2016年11月data.table
更改之前提出的,请参阅下面的当前和以前方法的可接受答案。
我有一个data.table
表,大约有250万行。有两列。我想删除两列中重复的所有行。以前对于data.frame,我会这样做:df -> unique(df[,c('V1', 'V2')])
,但这对data.table不起作用。我试过unique(df[,c(V1,V2), with=FALSE])
,但它似乎仍然只对data.table的键进行操作,而不是整行。
有什么建议吗?
干杯,戴维
示例
>dt
V1 V2
[1,] A B
[2,] A C
[3,] A D
[4,] A B
[5,] B A
[6,] C D
[7,] C D
[8,] E F
[9,] G G
[10,] A B
在上面的data.table中,其中V2
是表关键字,只有第4、7和10行将被删除。
dt <- data.table::data.table(
V1 = c("B", "A", "A", "A", "A", "A", "C", "C", "E", "G"),
V2 = c("A", "B", "B", "B", "C", "D", "D", "D", "F", "G"),
)
5条答案
按热度按时间yvfmudvl1#
v1.9.8+(released November 2016)
From
?unique.data.table
默认情况下使用所有列(与?unique.data.frame
一致)或者使用
by
参数来获得特定列的唯一组合(就像以前使用的键一样)。1.9.8之前版本
从
?unique.data.table
中可以清楚地看到,对数据表调用unique
只对键有效。这意味着您必须在调用unique
之前重置所有列的键。使用一列作为键调用
unique
:1qczuiv02#
使用您的示例data. table...
考虑以下测试:
因此,您可以列出表中的列,然后获取其中的
unique()
,而不需要根据@Andrie的解决方案(由@MatthewDowle编辑)的要求将键设置为所有列或删除它(通过将其设置为NULL
)。@Pop和@Rahul提出的解决方案对我不起作用。请参阅下面的第3次尝试,这与您最初的尝试非常相似。你的例子不清楚,所以我不知道为什么它不起作用。另外,几个月前你发布了这个问题,所以也许
data.table
已经更新了?vxqlmq5t3#
unique(df)
可以在您的示例中工作。jc3wubiy4#
这个应该对你有用
k2arahey5#
保存数据。可以使用的表格表示法:
如https://stackoverflow.com/a/31875208/10087503
我还没有比较这个与岩浆的版本的速度。