超过2个data.frames的带后缀的嵌套全_联接

超过2个data.frames的带后缀的嵌套全_联接,r,dataframe,join,dplyr,outer-join,R,Dataframe,Join,Dplyr,Outer Join,我想将几个data.frames与一些常用列合并,并在列名后附加一个后缀,以跟踪每列的数据来自何处 我可以很容易地在第一个完整连接中使用后缀项,但是当我进行第二个连接时,没有添加后缀。我可以重命名第三个data.frame,使其具有后缀,但我想知道是否有其他方法可以使用后缀项 下面是一个示例代码: x = data.frame(col1 = c("a","b","c"), col2 = 1:3, col3 = 1:3) y = data

我想将几个data.frames与一些常用列合并,并在列名后附加一个后缀,以跟踪每列的数据来自何处

我可以很容易地在第一个完整连接中使用后缀项,但是当我进行第二个连接时,没有添加后缀。我可以重命名第三个data.frame,使其具有后缀,但我想知道是否有其他方法可以使用后缀项

下面是一个示例代码:

x = data.frame(col1 = c("a","b","c"), col2 = 1:3, col3 = 1:3)
y = data.frame(col1 = c("b","c","d"), col2 = 4:6, col3 = 1:3)
z = data.frame(col1 = c("c","d","a"), col2 = 7:9, col3 = 1:3)

> df = full_join(x, y, by = "col1", suffix = c("_x","_y")) %>% 
  full_join(z, by = "col1", suffix = c("","_z")) 

> df
  col1 col2_x col3_x col2_y col3_y col2 col3
1    a      1      1     NA     NA    9    3
2    b      2      2      4      1   NA   NA
3    c      3      3      5      2    7    1
4    d     NA     NA      6      3    8    2
我原以为data.frame
z
中的
col2
col3
会有一个“z”后缀。我曾尝试在合并两个data.frames时使用空后缀,效果很好

在进行第二次完整联接之前,我可以通过重命名
z
中的列来解决这个问题,但是在我的真实数据中,我有几个常见的列,如果我想合并更多的data.frames,这会使代码复杂化。这是我的预期输出

> colnames(z) = paste0(colnames(z),"_z")

> df = full_join(x, y, by = "col1", suffix = c("_x","_y")) %>% 
  full_join(z, by = c("col1"="col1_z"))

> df
  col1 col2_x col3_x col2_y col3_y col2_z col3_z
1    a      1      1     NA     NA      9      3
2    b      2      2      4      1     NA     NA
3    c      3      3      5      2      7      1
4    d     NA     NA      6      3      8      2
我还看到过另一个例子,其中使用了添加一个额外的列来跟踪源data.frame,但我想知道为什么后缀术语不能用于多个连接

PS:如果我保持第一个后缀为空,我可以在第二个连接中添加后缀,但这将使col2和col3表单x没有后缀

> df = full_join(x, y, by = "col1", suffix = c("","_y")) %>% 
  full_join(z, by = "col1", suffix = c("","_z"))

> df
  col1 col2 col3 col2_y col3_y col2_z col3_z
1    a    1    1     NA     NA      9      3
2    b    2    2      4      1     NA     NA
3    c    3    3      5      2      7      1
4    d   NA   NA      6      3      8      2

您可以这样做:

full_join(x, y, by = "col1", suffix = c("","_y")) %>% 
  full_join(z, by = "col1", suffix = c("_x","_z"))

  col1 col2_x col3_x col2_y col3_y col2_z col3_z
1    a      1      1     NA     NA      9      3
2    b      2      2      4      1     NA     NA
3    c      3      3      5      2      7      1
4    d     NA     NA      6      3      8      2

在最后一次加入时为
x
添加
后缀应该可以达到目的。

谢谢你的回复,但在我的真实数据集中,我有很多列,按名称调用它们很乏味,当我开始合并其他数据集和索引更改时,按索引调用它们可能会出错。我很惊讶第二个后缀词不起作用。我只想为新添加的列添加一个后缀,这应该很简单。