Добавить недостающие столбцы из другого data.frame, заполненного 0 - PullRequest
0 голосов
/ 06 марта 2019

У меня следующая ситуация:

df1
a b c d
1 2 3 4

df2
a c
5 6

И в результате я хочу заполнить второй data.frame недостающими столбцами из df1 и заполнить их нулями.Таким образом, результат должен быть:

df3
a b c d
5 0 6 0

Фреймы данных довольно большие, и поэтому автоматизированный способ сделать это будет gerate.

Ответы [ 3 ]

3 голосов
/ 06 марта 2019

Мы можем использовать setdiff, чтобы найти столбцы, которых нет в df2, и присвоить этим столбцам значение 0.

df2[setdiff(names(df1), names(df2))] <- 0

#  a c b d
#1 5 6 0 0

Если мы хотим сохранить тот же порядок столбцов, что ив df1 мы можем позже сделать

df2[names(df1)]
#  a b c d
#1 5 0 6 0
1 голос
/ 06 марта 2019

Возможно, есть более элегантное решение, но я думаю, что оно подходит для вашей ситуации.Если вы не слишком озабочены смешением рабочего процесса с синтаксисом 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 
0 голосов
/ 06 марта 2019
df1 <- data.frame(a = 1, b = 2, c = 3, d = 4)

df2 <- data.frame(a = 5, c = 6)

library(tidyverse)

right_join(df1, df2)

 a  b c  d
1 5 NA 6 NA

Вам придется изменить NA на 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...