Edit 2019: This question was asked prior to changes in 100 in November 2016, see the accepted answer below for both the current and previous methods.

我有一张大约250万行的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

在上述数据中.table如果V2是表键,则只会删除第4、7和10行.

> dput(dt)
structure(list(V1 = c("B", "A", "A", "A", "A", "A", "C", "C", 
"E", "G"), V2 = c("A", "B", "B", "B", "C", "D", "D", "D", "F", 
"G")), .Names = c("V1", "V2"), row.names = c(NA, -10L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x7fb4c4804578>, sorted = "V2")

推荐答案

For v1.9.8+ (released November 2016)

?unique.data.table

unique(dt)
   V1 V2
1:  A  B
2:  A  C
3:  A  D
4:  B  A
5:  C  D
6:  E  F
7:  G  G

或者使用by参数来获得特定列的唯一组合(就像之前使用的键一样)

unique(dt, by = "V2")
   V1 V2
1:  A  B
2:  A  C
3:  A  D
4:  B  A
5:  E  F
6:  G  G

Prior v1.9.8

?unique.data.table开始,很明显对数据表调用unique只对键起作用.这意味着您必须在调用unique之前将键重置为所有列.

library(data.table)
dt <- data.table(
  V1=LETTERS[c(1,1,1,1,2,3,3,5,7,1)],
  V2=LETTERS[c(2,3,4,2,1,4,4,6,7,2)]
)

用一列作为键调用unique:

setkey(dt, "V2")
unique(dt)
     V1 V2
[1,]  B  A
[2,]  A  B
[3,]  A  C
[4,]  A  D
[5,]  E  F
[6,]  G  G

R相关问答推荐

R包terra在投影时如何决定模板格栅属性?

逐行替代引用前一行的for循环

如何根据包含相同值的某些列获取总额

创建重复删除的唯一数据集组合列表

R的GG平行坐标图中的排序变量

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

使用tidyverse方法绑定行并从一组管道列表执行左连接

如何在R中添加截止点到ROC曲线图?

R for循环返回到先前值

使用Facet_WRAP时更改框图中线的 colored颜色

根据类别合并(汇总)某些行

以相同的方式对每个表进行排序

按时间顺序对不同事件进行分组

QY数据的处理:如何定义QY因素的水平

正则表达式在第二个管道和第二个T之后拆分R中的列

在R中使用列表(作为tibble列)进行向量化?

为什么我对圆周率图的蒙特卡罗估计是空的?

将多个列合并为一个列的有效方法是什么?

R -基线图-图形周围的阴影区域