Объединение фреймов данных разной длины без уникальных ключей - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь объединить два фрейма данных разной длины без использования уникального ключа.

Например:

Name <- c("Steve","Peter")
Age <- c(10,20)

df1 <- data.frame(Name,Age)

> df1
   Name Age
1 Steve  10
2 Peter  20

Name <-c("Jason","Nelson")
School <-c("xyz","abc")

df2 <- data.frame(Name,School)

> df2
    Name School
1  Jason    xyz
2 Nelson    abc

Я хочу объединить эти две таблицы, чтобы у меня было все столбцы и содержат ячейки NA для строк, в которых изначально не было этого столбца. Это должно выглядеть примерно так:

    Name Age School
1  Steve  10   <NA>
2  Peter  20   <NA>
3  Jason  NA    xyz
4 Nelson  NA    abc

заранее спасибо!

1 Ответ

1 голос
/ 07 мая 2020
dplyr::bind_rows(df1,df2)
# Warning in bind_rows_(x, .id) :
#   Unequal factor levels: coercing to character
# Warning in bind_rows_(x, .id) :
#   binding character and factor vector, coercing into character vector
# Warning in bind_rows_(x, .id) :
#   binding character and factor vector, coercing into character vector
#     Name Age School
# 1  Steve  10   <NA>
# 2  Peter  20   <NA>
# 3  Jason  NA    xyz
# 4 Nelson  NA    abc

Вы можете облегчить некоторые из этих ситуаций, предварительно назначив нераспознанные столбцы, что также хорошо работает с базовым R:

df2 <- cbind(df2, df1[NA,setdiff(names(df1), names(df2)),drop=FALSE])
df1 <- cbind(df1, df2[NA,setdiff(names(df2), names(df1)),drop=FALSE])
df1
#       Name Age School
# NA   Steve  10   <NA>
# NA.1 Peter  20   <NA>
df2
#        Name School Age
# NA    Jason    xyz  NA
# NA.1 Nelson    abc  NA

# ensure we use the same column order for both frames
nms <- names(df1)
rbind(df1[,nms], df2[,nms])
#         Name Age School
# NA     Steve  10   <NA>
# NA.1   Peter  20   <NA>
# NA1    Jason  NA    xyz
# NA.11 Nelson  NA    abc
...