即使两个数据帧之间的某些行不同,R 合并也不复制列
R merge not duplicating columns even when some row differ between both dataframes
我正在尝试合并 2 个仅在一行和一列不同的数据帧:
df1
factor nb pass
A f 1 Yes
B c 3 No
C a 3 Yes
df2
factor quality pass
A f 100 Yes
B c 30 No
D x 60 Yes
咨询 this post 后,我尝试了以下方法:
merge(df1, df2, by='row.names')
但这只是 returns 两个数据框之间的共同观察,并且它还复制了共同的列:
df3
factor.x nb.x pass.x factor.y quality.y pass.y
A f 1 Yes f 100 Yes
B c 3 No c 30 No
我也试过:
merge(df1, df2)
但它不起作用,因为常见变体位于行名中。
终于,我试过了:
merge(df1, df2, by='row.names', all =T, no.dup= T)
在这种情况下,不常见的观察结果也包含在合并的数据框中,但所有变体都是重复的。
你知道我怎样才能得到这个数据框吗?
factor nb pass quality
A f 1 Yes 100
B c 3 No 30
C a 3 Yes NA
D x NA Yes 60
谢谢!
library(dplyr)
full_join(df1, df2)
Joining, by = c("id", "factor", "pass")
id factor nb pass quality
1 A f 1 Yes 100
2 B c 3 No 30
3 C a 3 Yes NA
4 D x NA Yes 60
R 对行名不是很好,如果你想保留行名你需要先将它们添加为一列然后按所有公共列合并
merge(
cbind("rows"=rownames(df1),df1),
cbind("rows"=rownames(df2),df2),
all=T
)
rows factor pass nb quality
1 A f Yes 1 100
2 B c No 3 30
3 C a Yes 3 NA
4 D x Yes NA 60
或者
merge(df1,df2,by=c("row.names","factor","pass"),all=T)
我正在尝试合并 2 个仅在一行和一列不同的数据帧:
df1
factor nb pass
A f 1 Yes
B c 3 No
C a 3 Yes
df2
factor quality pass
A f 100 Yes
B c 30 No
D x 60 Yes
咨询 this post 后,我尝试了以下方法:
merge(df1, df2, by='row.names')
但这只是 returns 两个数据框之间的共同观察,并且它还复制了共同的列:
df3
factor.x nb.x pass.x factor.y quality.y pass.y
A f 1 Yes f 100 Yes
B c 3 No c 30 No
我也试过:
merge(df1, df2)
但它不起作用,因为常见变体位于行名中。
终于,我试过了:
merge(df1, df2, by='row.names', all =T, no.dup= T)
在这种情况下,不常见的观察结果也包含在合并的数据框中,但所有变体都是重复的。
你知道我怎样才能得到这个数据框吗?
factor nb pass quality
A f 1 Yes 100
B c 3 No 30
C a 3 Yes NA
D x NA Yes 60
谢谢!
library(dplyr)
full_join(df1, df2)
Joining, by = c("id", "factor", "pass")
id factor nb pass quality
1 A f 1 Yes 100
2 B c 3 No 30
3 C a 3 Yes NA
4 D x NA Yes 60
R 对行名不是很好,如果你想保留行名你需要先将它们添加为一列然后按所有公共列合并
merge(
cbind("rows"=rownames(df1),df1),
cbind("rows"=rownames(df2),df2),
all=T
)
rows factor pass nb quality
1 A f Yes 1 100
2 B c No 3 30
3 C a Yes 3 NA
4 D x Yes NA 60
或者
merge(df1,df2,by=c("row.names","factor","pass"),all=T)