2016-01-14 2 views
1

Есть ли способ объединить два кадра данных на основе их разницы? Например, у нас есть этот кадр данных ...r объединение данных на основе differece

set.seed(1234) 
example1 = data.frame(Area=c("Zone1","Zone2","Zone3","Zone4"), 
         X1a=sample(10,4), X1b=sample(10,4), X1c=sample(10,4), 
         X1d=sample(10,4), X1e=sample(10,4)) 

example1 
# Area X1a X1b X1c X1d X1e 
#1 Zone1 9 3 1 10 3 
#2 Zone2 3 10 2 8 10 
#3 Zone3 10 9 7 1 5 
#4 Zone4 2 2 4 4 2 

И мы делаем некоторые операции, как это и мы в конечном итоге ...

example2<-example1[-c(2,4),] 
example2 
# Area X1a X1b X1c X1d X1e 
#1 Zone1 9 3 1 10 3 
#3 Zone3 10 9 7 1 5 

Есть ли способ объединить эти два основаны на разница между ними, например, я хочу объединить пример2 с примером1, есть ли способ закончить так?

example3<-combineDiff(original=example2, use= example1) 

example3 
# Area X1a X1b X1c X1d X1e 
#1 Zone1 9 3 1 10 3 
#2 Zone2 3 10 2 8 10 
#3 Zone3 10 9 7 1 5 
#4 Zone4 2 2 4 4 2 

Таким образом, мы не получаем дубликатов строк Zone1 и Zone3? Также есть способ изменить значения этих новых строк? Например, что-то вроде этого?

example3<-combineDiff(original=example2, use=example1, newRows=0) 

example3 
# Area X1a X1b X1c X1d X1e 
#1 Zone1 9 3 1 10 3 
#2 Zone2 0 0 0 0 0 
#3 Zone3 10 9 7 1 5 
#4 Zone4 0 0 0 0 0 

I'm спрашивает, потому что я работаю с визуализацией некоторых данных с листком и г, А I'm работает в неприятность, когда я выборка данных (например, «показать только данные от людей» или «люди более 50 "). Способ, которым я настроил это, заключается в том, что данные получают подмножество, основанное на checkboxinput, и часто бывает, что в итоге у меня меньше строк, а затем зон, которые я пытаюсь визуализировать, что мешает выходу, поэтому мне нужен способ повторно вставить потерянные строки/зоны и изменить их значение, чтобы я знал, что они должны быть равны нулю или NA.

+1

Я не уверен, что понимаю, что вы делаете на третьем шаге, 'example3' выглядит идентично' example1' – mtoto

+1

Есть ли только одна строка для каждой зоны в df? – Gopala

+0

Начните с 'part <-use [! Use $ Area% in% original $ Area,]', чтобы получить часть второго аргумента, отсутствующего в оригинале. Затем вы можете «перевернуть» его на «оригинал», при необходимости изменив его значения на «newRows» (например, 'part [-1] <- newRows'). – nicola

ответ

0

В случае первого (или оба) кадры данных имеют одну строку для каждого значения площади, вы можете попробовать:

example <- rbind(example1[!example1$Area %in% example2$Area, ], example2) 

Если вы хотите расположить их обратно по столбцам Area, вы можете сделать:

example <- example[sort(example$Area), ]