2015-06-24 7 views
0

У меня есть таблица1 и таблица2, и я хочу получить Table3.R: добавить столбец в соответствии со значениями в двух таблицах

Для каждой строки в Table3

  • идентификатор должен быть в обоих Table1 и Table2
  • значение вар = значение вар в таблице добавляется 2
  • один столбец var_difference, где var_difference = Table2.var - Table1.var

Table1:

id var 
01 2 
02 3 

Table2:

id var 
02 4 
03 5 

Таблица3:

id var var_difference 
02 4 1 
+0

в этом примере, 02 является единственным идентификатор, который в общем и Table1.var = 3, Table2.var = 4, так что var_difference = 4-3 = 1 – Meng

+0

Перейти через это, и в итоге вы увидите слайд на «слиянии данных»: http://www.ats.ucla.edu/stat/r/seminars/intro.htm – Frank

ответ

0
tab3 <- merge(tab1, tab2, by = "id") 
tab3$var_difference <- tab3[ ,3] - tab3[ ,2] 
tab3 <- tab3[ ,-2:-3] 
4

данных

t1 <- data.frame(id = paste0("0", 1:2), var = 2:3) 
t2 <- data.frame(id = paste0("0", 2:3), var = 4:5) 

Код

transform(merge(t1, t2, by = "id"), 
      var = var.x, var_difference = var.y - var.x, 
      var.x = NULL, var.y = NULL) 
# id var var_difference 
# 1 02 3    1 

Объяснение

С merge вы создаете data.frame, который содержит строки, которые имеют тот же id. transform работает с возвратом data.frame и форматирует вывод, который вы хотели иметь. Сначала сначала создается столбец var, затем столбец var_difference. Наконец, удаляются var.x и var.y. Последние столбцы были созданы merge и представляют столбцы var двух аргументов merge (t1 и t2).

+0

Спасибо за объяснение. Для меня это делает разницу между ответом и отличным ответом, так как это действительно так, как кто-то ловить рыбу. – PavoDive

0

Попытка следующее:

Table3 <- merge(Table1[,'id'], Table2, by.x = 'id', by.y = 'id') 
Table3$var_difference <- Table2$var[Table2$id %in% Table3$id] - Table1$var[Table1$id %in% Table3$id] 
+1

Я думаю, вам может понадобиться 'drop = FALSE', так как' Table1 [, 'id'] 'оценивает вектор без имени (благодаря R-странности). Попробуйте 'data.frame (a = 1: 3) [, 'a']' versus 'data.frame (a = 1: 3) [, 'a', drop = FALSE]' – Frank

+0

Спасибо, Фрэнк. Я это сделаю. – GarAust89

Смежные вопросы