2015-07-30 4 views
1

Я хотел бы сравнить DT1 к dt2 такое, что если DT1 Значение столбца существует, когда он по сравнению с dt2 A значение столбца не добавит строки или изменит значение в этой строке. Поэтому, когда значение различны, как показано в примере, где dt2 имеет «4» & «5» в колонке будет добавить «4» & «5» в dt1 стол, но это не заменит это значение «1», «2» или «3» в dt1 Столбец, так как он уже существует.сравнить две таблицы и добавление строк, основываясь на состоянии

Редактировать: Я хотел бы использовать столбец в форме первичного ключа, чтобы проверить что-то вдоль строки if, если «1» существует в столбце A в обеих обеих таблицах, тогда ничего не меняется, но если в нем есть столбец A значение в dt2 (пример: «4»), но не в DT1 тогда я бледный, что строка данных для слияния с DT1 таблицы

dt1 
A B C 
1 4 7 
2 5 8 
3 6 9 

dt2 
A B C 
1 10 13 
2 12 15 
3 11 14 
4 1 20 
5 12 3 

dt1 
A B C 
1 4 7 
2 5 8 
3 6 9  
4 1 20 
5 12 3 
+0

Соответствующее сообщение: [Как присоединиться (объединить) кадров данных (внутренние, внешний, левый, правый)?] (http://stackoverflow.com/questions/1299871/how-to-join-merge-data-frames-inner-outer-left-right) – zx8754

ответ

3

Вы можете связать dt1 со строками из dt2, что не имеют значений A в dt1 только с одним условным оператором

rbind(dt1, dt2[!(dt2$A %in% dt1$A),]) 
# A B C 
# 1 1 4 7 
# 2 2 5 8 
# 3 3 6 9 
# 4 4 1 20 
# 5 5 12 3 
2

Или с помощью dplyr, мы получаем те строки, которые находятся в «dt2», которые не являются в «dt1» сгруппированных по «A» с anti_join и rbind с «dt1», используя bind_rows

library(dplyr) 
anti_join(dt2, dt1, by='A') %>% 
         bind_rows(dt1, .) 

Или другой вариант будет использовать rbindlist для rbind как наборы данных и получить unique, основанный на колонке «A».

library(data.table) 
unique(rbindlist(list(dt1, dt2)), by='A') 

Или, как @Arun упоминалось в комментариях, если мы используем версию Devel из «» data.table т.е. v1.9.5 (инструкции по установке версии Devel являются here), on вариант может быть использован для соединения два набора данных без указания ключей, чтобы получить строки в «dt2», которые не являются в «dt1» и rbind с «dt1»

rbind(dt1, dt2[!dt1, on="A"]) 
Смежные вопросы