Возможно, есть более элегантное решение, но я думаю, что оно подходит для вашей ситуации.Если вы не слишком озабочены смешением рабочего процесса с синтаксисом dplyr
и data.table
, вы можете использовать setdiff()
для определения несоответствующих имен столбцов и использовать синтаксис data.table
для эффективного создания этих столбцов с нулевым значениембез использования циклов или apply()
функций.Убедившись, что это работает для всех возможных ситуаций, вы можете обернуть его в функцию и масштабировать его по нескольким наборам данных.
df1 <- data.frame(a = 1, b = 2, c = 3, d = 4)
df2 <- data.frame(a = 5, c = 6)
# Variables in df1 but not in df2
diff_vars <- dplyr::setdiff(names(df1),names(df2))
df2 %>%
data.table::data.table() %>%
.[,c(diff_vars):=0] %>%
tibble::as_tibble() # Can choose to keep this in data.table