如何修复:名称与 R 中以前的名称不匹配
在本文中,我们将解决 R 编程语言中的“名称与以前的名称不匹配”错误。
通常,此错误是由于在组合多个向量、数据帧时列名不匹配而产生的。
如何产生错误?
在这里,我们创建了两个具有 4 个不同列名(num、course、Marks、Subject)的数据框,而使用 rbind() 会发生错误。
R
# 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)
R
# 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)
R
# 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)
R
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
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
Error in match.names(clabs, names(xi)): names do not match previous names
如何解决此错误
方法 1:更改列名称
为了解决这个错误,我们必须更改列名,为此,我们将创建第三个数据帧并将第二个数据帧复制到其中,并从第一个数据帧复制列,如下面的代码所示。
R
# 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:重命名列名称
我们可以重命名列名来解决这个错误,为此我们将列复制到第二个数据框中。
R
# 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
方法三:使用 dplyr 包
在这里,我们将使用 dplyr 包中的 bind_rows() 方法,如果数据框没有元素,它将创建每一列以及现有值,然后保存为 NA 元素。
R
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