R 合并和匹配长度不等的数据帧

R 合并和匹配长度不等的数据帧,r,R,我有DF1和DF2 DF1 A B rs1 1 rs2 2 rs3 3 DF2 a b rs1 4 rs2 5 rs3 6 rs1 7 rs2 8 rs3 9 我想得到这样的输出 DF3 a_m b B_m rs1 4 1 rs2 5 2 rs3 6 3 rs1 7 1 rs2 8 2 rs3 9 3 我曾尝试将合并与all=T(正如在以前的帖子中所建议的那样),但这并不成功。您可以尝试以下

我有
DF1
DF2

DF1
A    B
rs1  1
rs2  2
rs3  3

DF2
a    b
rs1  4
rs2  5
rs3  6
rs1  7
rs2  8
rs3  9
我想得到这样的输出

DF3
a_m    b   B_m
rs1    4   1
rs2    5   2
rs3    6   3
rs1    7   1
rs2    8   2
rs3    9   3
我曾尝试将
合并
all=T
(正如在以前的帖子中所建议的那样),但这并不成功。

您可以尝试以下方法:

DF1
    A B
1 rs1 1
2 rs2 2
3 rs3 3
DF2
    a b
1 rs1 4
2 rs2 5
3 rs3 6
4 rs1 7
5 rs2 8
6 rs3 9
DF3 <- merge(DF1, DF2, by.x = "A", by.y = "a", all = T)
DF3
    A B b
1 rs1 1 4
2 rs1 1 7
3 rs2 2 5
4 rs2 2 8
5 rs3 3 6
6 rs3 3 9
DF1
A B
1 RS11
2 rs2
3 rs3 3
DF2
a b
1 RS14
2 rs2 5
3 rs3 6
4 RS17
5 rs2 8
6 rs3 9
DF3您可以尝试以下方法:

DF1
    A B
1 rs1 1
2 rs2 2
3 rs3 3
DF2
    a b
1 rs1 4
2 rs2 5
3 rs3 6
4 rs1 7
5 rs2 8
6 rs3 9
DF3 <- merge(DF1, DF2, by.x = "A", by.y = "a", all = T)
DF3
    A B b
1 rs1 1 4
2 rs1 1 7
3 rs2 2 5
4 rs2 2 8
5 rs3 3 6
6 rs3 3 9
DF1
A B
1 RS11
2 rs2
3 rs3 3
DF2
a b
1 RS14
2 rs2 5
3 rs3 6
4 RS17
5 rs2 8
6 rs3 9

DF3我们可以从
dplyr

library(dplyr)
full_join(DF2,DF1, by = c("a" = "A")) %>%
               setNames(., c("a_m", "b", "B_m"))
#  a_m b B_m
#1 rs1 4   1
#2 rs2 5   2
#3 rs3 6   3
#4 rs1 7   1
#5 rs2 8   2
#6 rs3 9   3

我们可以从
dplyr

library(dplyr)
full_join(DF2,DF1, by = c("a" = "A")) %>%
               setNames(., c("a_m", "b", "B_m"))
#  a_m b B_m
#1 rs1 4   1
#2 rs2 5   2
#3 rs3 6   3
#4 rs1 7   1
#5 rs2 8   2
#6 rs3 9   3


merge
的默认值不适用于您,因为您在DF1中有不同的列名,
A
,在DF2中有不同的列名。执行
merge(DF1,DF2,all=T,by.x=“A”,by.y=“A”)
或更改名称,使要合并的列具有相同的名称,然后
merge(DF1,DF2,all=T)
将起作用。谢谢,我已尝试合并两个数据帧,在这种情况下,它返回的结果也不是我期望的结果,
all=T
不是必需的。默认设置可以正常工作。请参阅了解如何准确共享数据(使用
dput(DF1)
!)您可以将其作为新列添加到
DF2
DF2$c
merge
默认设置不适用于您,因为您在DF1中有不同的列名,
A
,在DF2中有不同的列名。执行
merge(DF1,DF2,all=T,by.x=“A”,by.y=“A”)
或更改名称,使要合并的列具有相同的名称,然后
merge(DF1,DF2,all=T)
将起作用。谢谢,我已尝试合并两个数据帧,在这种情况下,它返回的结果也不是我期望的结果,
all=T
不是必需的。默认设置可以正常工作。请参阅以了解如何准确共享数据(使用
dput(DF1)
!)您可以将其作为新列添加到
DF2
DF2$c它返回仅由第一个字符填充的意外列row@HoHoHo不是你提供的数据,不是。如果您有奇怪的类或其他您没有告诉我们的事情,请与
dput()
共享您的数据。检查更新的答案。这是您想要的吗?我不想更改输出数据帧中A列的顺序。有可能吗?那么您想保持A列在DF2中的顺序吗?它只返回由first填充的意外列row@HoHoHo不是你提供的数据,不是。如果您有奇怪的类或其他您没有告诉我们的事情,请与
dput()
共享您的数据。检查更新的答案。这是您想要的吗?我不想更改输出数据帧中A列的顺序。有可能吗?那么您想保持DF2中A列的顺序吗?谢谢,但是我们放松了第一列的顺序谢谢,但是我们放松了第一列的顺序