Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R两个表合并_R - Fatal编程技术网

R两个表合并

R两个表合并,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

我有两个data.frame
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列都得到了一个不同的结果。需要在回答中进行一些解释这是实现这个结果的大量代码。早期的答案更简洁,没有引入新的包依赖性…需要在答案中进行一些解释,这需要很多代码才能实现这个结果。以前的答案更简洁,没有引入新的包依赖性。。。