2016-07-28 13 views
0

У меня есть два объекта data.frame, которые должны получить его относительный набор дополнений от одного к другому. Я проверил подобный пост с этого сайта, конечно, кто-то спросил уже, но это был про вектор, и все в порядке. Тем не менее, я пробовал решение из существующей почты на этом сайте, но я не получил ожидаемого результата. Я пробовал несколько подходов, таких как setdiff, pmatch vise versa, а не возвращал ожидаемый результат. Может ли кто-нибудь предложить возможность эффективного решения этой задачи?Как получить относительное дополнение одного data.frame в другом?

пример

foo <- data.frame(start=seq(1, by=4, len=6), stop=seq(3, by=4, len=6)) 
bleh <- data.frame(start=seq(1, by=5, len=5), stop=seq(3, by=5, len=5)) 

желаемый результат:

Согласно дополнить теорию множеств в вики, мой ожидаемый результат следующим образом:

start stop 
1  5 7 
2  9 11 
3 13 15 
4 17 19 

Как я могу получить соответствующий набор комплемента одного данных .Разработать другому? Каков правильный путь к достижению этой задачи? Благодаря

ответ

2

Попробуйте это

library(dplyr) 
output <- anti_join(foo,bleh) 
output[order(output$start),] 

Другой вариант использования setdiff из dplyr пакета (@Frank Спасибо за исправление)

setdiff(foo,bleh) 
# start stop 
#1  5 7 
#2  9 11 
#3 13 15 
#4 17 19 
+0

является то, что можно улучшить немного больше? Я имею в виду упорядочить их (соответственно как строку, так и ее индекс). Thx – datageek

+0

Я также пробовал вот так: base :: setdiff (foo, bleh), но это не соответствовало моему ожидаемому результату. Получили ли вы свой результат, если вы использовали setdiff? Странно, почему я получаю разные результаты? – datageek

+1

Нет, эта функция setdiff также из dplyr, и это лучший способ пойти, чем anti_join, на мой взгляд, поскольку он рассматривает каждую таблицу как набор (игнорирует строки dupe). – Frank