R两个表合并
我有两个data.frameR两个表合并,r,R,我有两个data.framedf1和df2 df1=data.frame(id=c(1,2,2),var1=c(3,5,5),var3=c(2,3,4)) df2=data.frame(id=c(1,1,2,2),var1=c('NONE','NONE','NONE','NONE'),var3=c(2,4,6,5)) 现在我想合并到一个data.frame。首先,我应该更改df2$var1。当df2$id与df1$id匹配时,使用df1$var1重新编码df2$var1。例如,df1$id=1
df1
和df2
df1=data.frame(id=c(1,2,2),var1=c(3,5,5),var3=c(2,3,4))
df2=data.frame(id=c(1,1,2,2),var1=c('NONE','NONE','NONE','NONE'),var3=c(2,4,6,5))
现在我想合并到一个data.frame。首先,我应该更改df2$var1
。当df2$id
与df1$id
匹配时,使用df1$var1
重新编码df2$var1
。例如,df1$id=1
df1$var1=3
然后df2$id=1
和df2$var1=3
,因此结果应该是这样的:
df1=data.frame(id=c(1,2,2),var1=c(3,5,5),var3=c(2,3,4)).
df2=data.frame(id=c(1,1,2,2),var1=c(3,3,5,5),var3=c(2,4,6,5))
df=data.frame(id=c(1,1,2,2,2,2),var1=c(3,3,5,5,5,5),var2=c(2,4,3,4,6,5))
其次,我想合并两个data.frame并删除同一个data.frame。结果如下:
df1=data.frame(id=c(1,2,2),var1=c(3,5,5),var3=c(2,3,4)).
df2=data.frame(id=c(1,1,2,2),var1=c(3,3,5,5),var3=c(2,4,6,5))
df=data.frame(id=c(1,1,2,2,2,2),var1=c(3,3,5,5,5,5),var2=c(2,4,3,4,6,5))
对不起,这是我第一次使用stackoverflow。最重要的是,英语不是我的母语
我想这就是你想要的
library(sqldf)
sqldf("select b.id, a.var1, b.var3 from df1 a left join df2 b on a.id = b.id")
除了第3行和第4行的第3列之外,这与您给出的期望结果示例相同。我相信这是由于您的示例中的输入错误造成的,但是如果我对此有误解,请让我知道(并解释为什么这些值会不同,我将相应地更新我的答案)
顺便说一句,有多种方法可以做到这一点,但我发现这一种方法既快捷又简单。我想这就是你想要的
library(sqldf)
sqldf("select b.id, a.var1, b.var3 from df1 a left join df2 b on a.id = b.id")
除了第3行和第4行的第3列之外,这与您给出的期望结果示例相同。我相信这是由于您的示例中的输入错误造成的,但是如果我对此有误解,请让我知道(并解释为什么这些值会不同,我将相应地更新我的答案)
顺便说一句,有多种方法可以做到这一点,但我发现这一种方法既快捷又简单。使用
合并:
df2$var1 <- df1[df2$id,'var1'];
df2
id var1 var3
1 1 3 2
2 1 3 4
3 2 5 6
4 2 5 5
df <- merge(df1, df2, by='id')[-2:-3]
df
id var1.y var3.y
1 1 3 2
2 1 3 4
3 2 5 6
4 2 5 5
5 2 5 6
6 2 5 5
df2$var1与merge
:
df2$var1 <- df1[df2$id,'var1'];
df2
id var1 var3
1 1 3 2
2 1 3 4
3 2 5 6
4 2 5 5
df <- merge(df1, df2, by='id')[-2:-3]
df
id var1.y var3.y
1 1 3 2
2 1 3 4
3 2 5 6
4 2 5 5
5 2 5 6
6 2 5 5
df2$var1
首先,我使用dplyr::union,然后我发现顺序被打乱了。
所以,最后我使用union_all,然后对它进行排序
首先,我使用dplyr::union,然后我发现顺序被打乱了。
所以,最后我使用union_all,然后将其排序为unique(rbind(df1,merge(df1[,-3],df2[,-2],by='id'))
我认为您给出的结果示例中有一个小错误@HubertL和我对第3行和第4行的第3列都得到了不同的结果。unique(rbind(df1,merge(df1[,-3],df2[,-2],by='id'))
我认为您给出的结果示例中有一个小错误@HubertL和我对第3行和第4行的第3列都得到了一个不同的结果。需要在回答中进行一些解释这是实现这个结果的大量代码。早期的答案更简洁,没有引入新的包依赖性…需要在答案中进行一些解释,这需要很多代码才能实现这个结果。以前的答案更简洁,没有引入新的包依赖性。。。