📜  如何修复:名称与 R 中以前的名称不匹配

📅  最后修改于: 2022-05-13 01:55:00.463000             🧑  作者: Mango

如何修复:名称与 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

如何解决此错误

方法 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