Объединение датафреймов разной длинны
У меня есть два датафрейма с разным количеством строк. В первом столбце условный индекс наблюдения, а во втором значение наблюдения. Мне необходимо объединить эти два датафрейма в один по их индексам, и если в каком либо из датафреймов нет наблюдения с таким индексом как в первом , то нужно заполнить для этой переменно пустым значением 0 или NA.
a <- data.table(c(1,2,3,4,5), c(43,56,76,34,12))
b <- data.table(c(1,3,5,6), c(33,21,84,25))
Для наглядности приведу пример того , что должно получится в итоговом фрейме.
Ответы (1 шт):
При работе с data.table удобно исопльзовать функцию merge. В данном случае нам понадобится указать параметр all = TRUE, чтобы получить поведение аналогичное FULL JOIN.
> res <- merge(a, b, by = c("V1"), all = TRUE)
> res
V1 V2.x V2.y
1: 1 43 33
2: 2 56 NA
3: 3 76 21
4: 4 34 NA
5: 5 12 84
6: 6 NA 25
Заполнить пропущенные значнеия можно с помощью функции setnafill.
> setnafill(res, cols = c("V2.x", "V2.y"), fill = 0)
> res
V1 V2.x V2.y
1: 1 43 33
2: 2 56 0
3: 3 76 21
4: 4 34 0
5: 5 12 84
6: 6 0 25
Обратите внимание, что setnafill изменяет таблицу «на месте», аналогично другим функциям в пакете data.table с префиксом set.