如何修复 r: rbind(deparse.level, …) 中的错误:参数列号不匹配


在 R 中您可能遇到的错误是:

 Error in rbind(deparse.level, ...): 
  numbers of columns of arguments do not match 

当您尝试使用 R 中的 rbind() 函数将两个或多个列数不同的数据框绑定在一起时,会出现此错误。

本教程准确解释了如何修复此错误。

如何重现错误

假设我们在 R 中有以下两个数据框:

 #create first data frame
df1 <- data. frame (x=c(1, 4, 4, 5, 3),
                  y=c(4, 4, 2, 8, 10))

df1

  xy
1 1 4
2 4 4
3 4 2
4 5 8
5 3 10

#create second data frame
df2 <- data. frame (x=c(2, 2, 2, 5, 7),
                  y=c(3, 6, 2, 0, 0),
                  z=c(2, 7, 7, 8, 15))

df2

  X Y Z
1 2 3 2
2 2 6 7
3 2 2 7
4 5 0 8
5 7 0 15

现在假设我们尝试使用rbind将这两个数据帧绑定到一个数据帧中:

 #attempt to row-bind the two data frames together
rbind(df1, df2)

Error in rbind(deparse.level, ...): 
  numbers of columns of arguments do not match

我们收到错误,因为两个数据帧的列数不同。

如何修复错误

有两种方法可以解决这个问题:

方法 1:在公共列上使用 rbind

解决此问题的一种方法是使用intersect()函数查找数据框之间的公共列名称,然后仅在这些列上链接数据框:

 #find common column names
common <- intersect(colnames(df1), colnames(df2))

#row-bind only on common column names
df3 <- rbind(df1[common], df2[common])

#view result
df3

   xy
1 1 4
2 4 4
3 4 2
4 5 8
5 3 10
6 2 3
7 2 6
8 2 2
9 5 0
10 7 0

方法 2:使用 dplyr 中的 bind_rows()

解决这个问题的另一种方法是使用dplyr包中的bind_rows()函数,它会自动填充不匹配的列名的 NA 值:

 library (dplyr)

#bind together the two data frames
df3 <- bind_rows(df1, df2)

#view result
df3

   X Y Z
1 1 4 NA
2 4 4 NA
3 4 2 NA
4 5 8 NA
5 3 10 NA
6 2 3 2
7 2 6 7
8 2 2 7
9 5 0 8
10 7 0 15

请注意,NA 值是为df1值填充的,因为该数据框中不存在z列。

其他资源

以下教程解释了如何解决 R 中的其他常见错误:

如何在 R 中修复:名称与以前的名称不匹配
如何在 R 中修复:较长物体的长度不是较短物体长度的倍数
如何在 R 中修复:对比只能应用于具有 2 个或更多级别的因子

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注