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

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