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=],以及 second
和 sec
) 创建一个如下所示的数据框
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)))
您可以使用 grep
在 df2
中查找与 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
我有两个以下形式的数据框
df1:
first | second |
---|---|
1 | 5 |
2 | 6 |
3 | 7 |
df2:
sec | fir |
---|---|
3 | 4 |
2 | 1 |
1 | 3 |
我正在尝试使用 rbind
(或任何其他有用的哈哈)通过对列名使用部分匹配(将 first
与 [ 匹配)来合并这两个数据帧的行=12=],以及 second
和 sec
) 创建一个如下所示的数据框
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)))
您可以使用 grep
在 df2
中查找与 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