Взгляните на страницу помощи для слияния. Параметр all
позволяет указать различные типы слияний. Здесь мы хотим установить all = TRUE
. Это приведет к слиянию, возвращаемому NA
для значений, которые не совпадают, которые мы можем обновить до 0 с помощью is.na()
:
zz <- merge(df1, df2, all = TRUE)
zz[is.na(zz)] <- 0
> zz
x y
1 a 0
2 b 1
3 c 0
4 d 0
5 e 0
Обновлено много лет спустя, чтобы ответить на следующий вопрос
Вам необходимо определить имена переменных во второй таблице данных, с которой вы не объединяете - для этого я использую setdiff()
. Проверьте следующее:
df1 = data.frame(x=c('a', 'b', 'c', 'd', 'e', NA))
df2 = data.frame(x=c('a', 'b', 'c'),y1 = c(0,1,0), y2 = c(0,1,0))
#merge as before
df3 <- merge(df1, df2, all = TRUE)
#columns in df2 not in df1
unique_df2_names <- setdiff(names(df2), names(df1))
df3[unique_df2_names][is.na(df3[, unique_df2_names])] <- 0
Создано в 2019-01-03 пакетом Представление (v0.2.1)