Как исправить в 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

  xy
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

   xy
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 и более уровнями

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *