R语言如何修复:names do not match previous names
在这篇文章中,我们将解决R编程语言中 “名称与之前的名称不匹配 “的错误。
一般来说,这个错误的产生是由于在梳理几个向量、数据框架时,列名不匹配。
如何产生这个错误呢
这里我们创建了两个数据框架,有4个不同的列名(num, course, Marks, Subject),而使用rbind()会产生错误。
# Create data for chart
val1 <-data.frame("num"=c(77,55,80,60),
"course"=c('DSA','C++','R','Python'))
print(val1)
val2 <-data.frame("Marks"=c(23,45,81,80),
"Subject"=c('COA','OS','SE','AI'))
print(val2)
rbind(val1,val2)
输出
num course
1 77 DSA
2 55 C++
3 80 R
4 60 Python
Marks Subject
1 23 COA
2 45 OS
3 81 SE
4 80 AI
match.names(clabs, names(xi))中的错误:名字与之前的名字不匹配
如何解决这个错误
方法1:改变列名
为了解决这个错误,我们必须改变列的名称,为此,我们将创建第三个数据框架,并将第二个数据框架复制到其中,然后从第一个数据框架中复制列,如下面的代码所示。
# Create data for chart
val1 <-data.frame("num"=c(77,55,80,60),
"course"=c('DSA','C++','R','Python'))
val2 <-data.frame("Marks"=c(23,45,81,80),
"Subject"=c('COA','OS','SE','AI'))
# Replicate data
val3 <- val2
# Change column names
colnames(val3) <- colnames(val1)
rbind(val1,val3)
输出
num course
77 DSA
55 C++
80 R
60 Python
23 COA
45 OS
81 SE
80 AI
方法2:重命名列名
我们可以重命名列名来解决这个错误,为此我们将把这些列复制到第二个数据框架。
# Create data for chart
val1 <-data.frame("num"=c(77,55,80,60),
"course"=c('DSA','C++','R','Python'))
val2 <-data.frame("Marks"=c(23,45,81,80),
"Subject"=c('COA','OS','SE','AI'))
# rename second data frame columns
names(val2) <- names(val1)
# row bind the two data frames
rbind(val1, val2)
输出
77 DSA
55 C++
80 R
60 Python
23 COA
45 OS
81 SE
80 AI
方法3:使用dplyr包
这里我们将使用dplyr包中的bind_rows()方法,它将创建每一列以及现有的值,如果数据框架中没有任何元素,那么它将保存为NA元素。
library("dplyr")
# Create data for chart
val1 <-data.frame("num"=c(77,55,80,60),
"course"=c('DSA','C++','R','Python'))
val2 <-data.frame("Marks"=c(23,45,81,80),
"Subject"=c('COA','OS','SE','AI'))
bind_rows(val1, val2)
输出
num course Marks Subject
77 DSA NA NA
55 C++ NA NA
80 R NA NA
60 Python NA NA
NA NA 23 COA
NA NA 45 OS
NA NA 81 SE
NA NA 80 AI