Одна ошибка, с которой вы можете столкнуться в 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 или более уровнями