Редагувати 2019: це питання було задано до змін у data.table
листопаді 2016 року; див. Прийняту відповідь нижче як для поточного, так і для попередніх методів.
У мене є data.table
таблиця приблизно з 2,5 мільйонами рядків. Є дві колонки. Я хочу видалити всі рядки, які дублюються в обох стовпцях. Раніше для 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.
> 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")
dt[, .N,by=.(V1,V2)][,1:2]