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