Как исправить в R: ошибка в rbind(deparse.level, …): номера столбцов аргументов не совпадают


Одна ошибка, с которой вы можете столкнуться в R:

Error in rbind(deparse.level, ...) : 
 numbers of columns of arguments do not match

Эта ошибка возникает, когда вы пытаетесь использовать функцию rbind() в R для связывания строк вместе двух или более фреймов данных, которые имеют разное количество столбцов.

В этом руководстве рассказывается, как именно исправить эту ошибку.

Как воспроизвести ошибку

Предположим, у нас есть следующие два фрейма данных в R:

#create first data frame
df1 <- data.frame(x=c(1, 4, 4, 5, 3),
 y=c(4, 4, 2, 8, 10))

df1

 x y
1 1 4
2 4 4
3 4 2
4 5 8
5 3 10

#create second data frame 
df2 <- data.frame(x=c(2, 2, 2, 5, 7),
 y=c(3, 6, 2, 0, 0),
 z=c(2, 7, 7, 8, 15))

df2

 x y z
1 2 3 2
2 2 6 7
3 2 2 7
4 5 0 8
5 7 0 15

Теперь предположим, что мы пытаемся использовать rbind для связывания строк этих двух фреймов данных в один фрейм данных:

#attempt to row-bind the two data frames together
rbind(df1, df2)

Error in rbind(deparse.level, ...) : 
 numbers of columns of arguments do not match

Мы получаем ошибку, потому что два фрейма данных не имеют одинакового количества столбцов.

Как исправить ошибку

Есть два способа решить эту проблему:

Способ 1: используйте rbind для общих столбцов

Один из способов решить эту проблему — использовать функцию intersect() , чтобы найти общие имена столбцов между фреймами данных, а затем привязать фреймы данных только к этим столбцам:

#find common column names
common <- intersect(colnames(df1), colnames(df2))

#row-bind only on common column names
df3 <- rbind(df1[common], df2[common])

#view result
df3

 x y
1 1 4
2 4 4
3 4 2
4 5 8
5 3 10
6 2 3
7 2 6
8 2 2
9 5 0
10 7 0

Способ 2: использовать bind_rows() из dplyr

Другой способ решить эту проблему — использовать функцию bind_rows() из пакета dplyr , которая автоматически заполняет значения NA для несовпадающих имен столбцов:

library(dplyr)

#bind together the two data frames
df3 <- bind_rows(df1, df2)

#view result
df3

 x y z
1 1 4 NA
2 4 4 NA
3 4 2 NA
4 5 8 NA
5 3 10 NA
6 2 3 2
7 2 6 7
8 2 2 7
9 5 0 8
10 7 0 15

Обратите внимание, что значения NA заполняются для значений из df1, поскольку столбец z не существует в этом фрейме данных.

Дополнительные ресурсы

В следующих руководствах объясняется, как устранять другие распространенные ошибки в R:

Как исправить в R: имена не совпадают с предыдущими именами
Как исправить в R: более длинная длина объекта не кратна более короткой длине объекта
Как исправить в R: контрасты могут применяться только к факторам с 2 или более уровнями

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.