【发布时间】:2020-11-12 00:01:15
【问题描述】:
我有一个具有相似变量名的数据框列表,我希望使用 full_join 按照它们在列表中出现的顺序加入这些数据框。
require(tidyverse)
x<-data.frame(id=c("a","a","b","b","b","c","c","c","c"),
sub.id=c("1","2","1","2","3","1","2","3","4"))
y<-data.frame(id = as.character(rep(1:4,each=2)),
sub.id = c("AA","CC","DD","AA","GG","OO","PP","OW"))
z<-data.frame(id = c("AA","CC","DD","GG","OO","OW","PP"),
sub.id = as.character(1:7))
dfs<-list(x,y,z)
我尝试使用 purrr 包中的 reduce 但这会将列表中的所有数据帧连接到第一个数据帧。在这种情况下,x 数据帧。
dfs %>%
reduce(full_join,by = c("sub.id" = "id"))
有没有办法对列表中的数据帧执行full_join,以使by 遵循数据帧出现在列表中的顺序?在此示例中,x 的 sub.id 将与 y 的 id 匹配,然后加入后来自 y 的 sub.id 将匹配最终加入的 z 的 id。
编辑: 这样做的预期结果应该类似于以下内容:
id sub.id.x sub.id.y sub.id.y.y
1 a 1 AA 1
2 a 1 CC 2
3 a 2 DD 3
4 a 2 AA 1
5 b 1 AA 1
6 b 1 CC 2
7 b 2 DD 3
8 b 2 AA 1
9 b 3 GG 4
10 b 3 OO 5
11 c 1 AA 1
12 c 1 CC 2
13 c 2 DD 3
14 c 2 AA 1
15 c 3 GG 4
16 c 3 OO 5
17 c 4 PP 7
18 c 4 OW 6
此时连接的列名后缀不变。
【问题讨论】:
-
当您的意思是对 x 和 y 进行完全连接时。结果中出现的 sub_id 不是 y 的 sub_id,而是来自两者。那么你到底想要什么?你能发布你的预期结果吗?