2014-10-23 3 views
-1

Если у меня есть два кадра данных, каждый из которых содержит 12 столбцов и имеет соответственно 4781 и 4807 строк, то я хочу пересечение этих двух кадров данных. Я использовал команду сравнения в пакете сравнения, и я обнаружил, что это подмножество другого. Но как мне получить разницу между ними? Благодаря!Получение различий между двумя кадрами данных в R

Если a1 и a2 являются два dataframes, то

class(a1)  class(a1$V1) 
data.frame factor 

class(a2)  class(a2$V1) 
data.frame factor 

Мне нужны эти элементы, которые присутствуют в большем dataframe, а не в другом dataframe

+0

Не могли бы вы предоставить воспроизводимые данные? Между тем, я думаю, вы хотите попробовать 'intersect()'. – jazzurro

+0

Я добавил ссылку для двух файлов. Также, я думаю, пересекаются работы над векторами. –

+0

@chan chong Вы можете использовать 'intersect' из' dplyr', который работает с data.frames. – akrun

ответ

0

набор Тестовые данные:

> aa = data.frame(x=1:10,y=letters[1:10]) 

разделён на две перекрывающиеся кадры данных. Это как ваши данные - есть некоторые строки, общие для каждого и некоторые строки, уникальные для каждого:

> a1 = aa[1:8,] 
> a2 = aa[5:10,] 
> a1 
    x y 
1 1 a 
2 2 b 
3 3 c 
4 4 d 
5 5 e 
6 6 f 
7 7 g 
8 8 h 
> a2 
    x y 
5 5 e 
6 6 f 
7 7 g 
8 8 h 
9 9 i 
10 10 j 

Затем используют dplyr операторы:

Уникальный к a2:

> dplyr::setdiff(a2,a1) 
    x y 
1 9 i 
2 10 j 

Это может быть то, что вы хотите. Я иллюстрировать некоторые другие установленные операции в любом случае:

Уникальной a1:

> dplyr::setdiff(a1,a2) 
    x y 
1 1 a 
2 2 b 
3 3 c 
4 4 d 

в обоих:

> intersect(a1,a2) 
    x y 
1 5 e 
2 6 f 
3 7 g 
4 8 h 

Это три части Венна диаграммы a1 и a2. Поэтому, если мы поместим эти три части вместе, мы должны вернуть весь наш набор:

> rbind(setdiff(a1,a2), intersect(a1,a2), setdiff(a2,a1)) == aa 
     x y 
1 TRUE TRUE 
2 TRUE TRUE 
3 TRUE TRUE 
4 TRUE TRUE 
5 TRUE TRUE 
6 TRUE TRUE 
7 TRUE TRUE 
8 TRUE TRUE 
9 TRUE TRUE 
10 TRUE TRUE 
Смежные вопросы