rbind 与部分列匹配?

rbind with partial column match?

我有两个以下形式的数据框

df1:

first second
1 5
2 6
3 7

df2:

sec fir
3 4
2 1
1 3

我正在尝试使用 rbind(或任何其他有用的哈哈)通过对列名使用部分匹配(将 first 与 [ 匹配)来合并这两个数据帧的行=12=],以及 secondsec) 创建一个如下所示的数据框

first second
1 5
2 6
3 7
4 3
1 2
3 1

提前感谢大家的帮助!!!!

对于rbind,它需要列具有相同的名称。因此,选项是用第一个数据的名称设置第二个数据的名称,然后 rbind

rbind(df1, setNames(df2, names(df1)))

如果我们需要通过检查子串来自动化,可以使用基于距离的方法

library(phonics)
nm1 <- c(names(df1), names(df2))
ind <- soundex(nm1, maxCodeLen = 2)
nm2 <- ave(nm1, ind, FUN = function(x) x[1])
rbind(df1, setNames(df2[match(ind[1:2], ind[3:4])], names(df1)))

您可以使用 grepdf2 中查找与 df1.

中的列名称相似的列名称
cols <- sapply(names(df2), function(x) grep(x, names(df1)))
cols
#sec fir 
#  2   1 

使用cols你可以重新排列df2,使它们的名字类似于df1然后rbind

rbind(df1, setNames(df2[cols], names(df1)))

#  first second
#1     1      5
#2     2      6
#3     3      7
#4     4      3
#5     1      2
#6     3      1