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$cmerge
默认设置不适用于您,因为您在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列的顺序吗?谢谢,但是我们放松了第一列的顺序谢谢,但是我们放松了第一列的顺序