2015-12-17 2 views
0

У меня есть таблица данных в R, называемая A, которая имеет три столбца Col1, Col2 и Col3. Другая таблица, называемая B, также имеет те же три столбца. Я хочу удалить все строки в таблице A, для которых пары (Col1, Col2) присутствуют в таблице B. Я попытался, но я не уверен, как это сделать. Я застрял на этом в течение последних нескольких дней.Удаление одной таблицы из другой в R

Спасибо,

+0

Поскольку вопрос закрыт, но цель дубликатов, вот еще одна в базе: 'subset (merge (A, '[[<-' (B," x ", value = 1), all.x = T), is.na (x), 1: ncol (A)) ' –

ответ

5

Мы можем использовать anti_join

library(dplyr) 
anti_join(A, B, by = c('Col1', 'Col2')) 
3

Вот идут, используя interaction:

A <- data.frame(Col1=1:3, Col2=2:4, Col3=10:12) 
B <- data.frame(Col1=1:2, Col2=2:3, Col3=10:11) 
A 
# Col1 Col2 Col3 
#1 1 2 10 
#2 2 3 11 
#3 3 4 12 

B 
# Col1 Col2 Col3 
#1 1 2 10 
#2 2 3 11 

byv <- c("Col1","Col2") 
A[!(interaction(A[byv]) %in% interaction(B[byv])),] 

# Col1 Col2 Col3 
#3 3 4 12 

или создать уникальный идентификатор для каждой строки, а затем исключить те, которые объединены :

A[-merge(cbind(A[byv],id=seq_len(nrow(A))), B[byv], by=byv)$id,] 
+0

Я не мог понять использование byv в этом примере. – Sumit

+0

@Sumit - извините, забыли вставить ссылку с 'byv', содержащую переменные в ней. – thelatemail

+1

Спасибо за ваш ответ. Это очень аккуратно. Btw, работает ли взаимодействие для таблиц данных? – Sumit

8
library(data.table) 
A = data.table(Col1 = 1:4, Col2 = 4:1, Col3 = letters[1:4]) 
# Col1 Col2 Col3 
#1: 1 4 a 
#2: 2 3 b 
#3: 3 2 c 
#4: 4 1 d 

B = data.table(Col1 = c(1,3,5), Col2 = c(4,2,1)) 
# Col1 Col2 
#1: 1 4 
#2: 3 2 
#3: 5 1 

A[!B, on = c("Col1", "Col2")] 
# Col1 Col2 Col3 
#1: 2 3 b 
#2: 4 1 d 
Смежные вопросы