Как исправить ошибку в R: имена не совпадают с предыдущими именами


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

Error in match.names(clabs, names(xi)) : 
 names do not match previous names

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

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

Пример: как исправить «имена не совпадают с предыдущими именами»

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

#create and view first data frame
df1 <- data.frame(var1=c(1, 3, 3, 4, 5),
 var2=c(7, 7, 8, 3, 2))

df1

 var1 var2
1 1 7
2 3 7
3 3 8
4 4 3
5 5 2

#create and view first second frame 
df2 <- data.frame(var3=c(3, 3, 6, 6, 8),
 var4=c(1, 1, 2, 8, 9))

df2

 var3 var4
1 3 1
2 3 1
3 6 2
4 6 8
5 8 9

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

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

Error in match.names(clabs, names(xi)) : 
 names do not match previous names

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

Первый фрейм данных имеет следующие имена столбцов:

  • переменная1
  • переменная2

И второй фрейм данных имеет следующие имена столбцов:

  • переменная3
  • переменная4

Мы даже можем использовать следующий код, чтобы проверить, идентичны ли имена столбцов между двумя фреймами данных:

#check if column names are identical between two data frames
identical(names(df1), names(df2))

[1] FALSE

Мы видим, что имена столбцов не идентичны.

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

#define two data frames
df1 <- data.frame(var1=c(1, 3, 3, 4, 5),
 var2=c(7, 7, 8, 3, 2))

df2 <- data.frame(var3=c(3, 3, 6, 6, 8),
 var4=c(1, 1, 2, 8, 9))

#rename second data frame columns
names(df2) <- c('var1', 'var2')

#row bind the two data frames
rbind(df1, df2)

 var1 var2
1 1 7
2 3 7
3 3 8
4 4 3
5 5 2
6 3 1
7 3 1
8 6 2
9 6 8
10 8 9

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

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

#define two data frames
df1 <- data.frame(var1=c(1, 3, 3, 4, 5),
 var2=c(7, 7, 8, 3, 2))

df2 <- data.frame(var3=c(3, 3, 6, 6, 8),
 var4=c(1, 1, 2, 8, 9))

#rename second data frame columns
names(df2) <- names(df1)

#row bind the two data frames
rbind(df1, df2)

 var1 var2
1 1 7
2 3 7
3 3 8
4 4 3
5 5 2
6 3 1
7 3 1
8 6 2
9 6 8
10 8 9

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

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

Как использовать rbind в R (с примерами)
Как использовать cbind в R (с примерами)
Как добавить строки во фрейм данных в R