Вычитание двух наборов данных

У меня есть 2 набора данных. Один из них — родительский набор данных (A), а другой — его подмножество (B). Я хочу создать набор данных из A, который не содержит строк из B. Это должно быть что-то вроде

C=A-B

Оба набора данных A и B имеют одинаковое количество столбцов и имена столбцов.


person SumitGupta    schedule 07.02.2012    source источник
comment
Дублировать? stackoverflow.com/ вопросы/7474735/   -  person Roman Luštrik    schedule 07.02.2012


Ответы (3)


Если B является фактическим subset из A, вы можете использовать setdiff на rownames:

sset <- subset(mtcars,cyl==4)
mtcars[setdiff(rownames(mtcars),rownames(sset)),]
person James    schedule 07.02.2012
comment
Очень хорошо. Просто отметим, что это работает, потому что повторяющиеся имена строк не разрешены (даже если вы установили check.names = FALSE при создании фрейма данных). - person Richie Cotton; 07.02.2012

Если вы не хотите преобразовывать его в строку для сравнения, т.е. выполнять точные совпадения, вы можете попробовать это.

a <- data.frame(t(matrix(1:12,3,4)))
b <- data.frame(t(matrix(7:21,3,5)))
a[!apply(a,1,FUN=function(y){any(apply(b,1,FUN=function(x){all(x==y)}))}),]
person sayan dasgupta    schedule 07.02.2012

Что-то вроде следующего может помочь:

C <- A[!(apply(A, 1, toString) %in% apply(B, 1, toString)), ]
person jbaums    schedule 07.02.2012