在R中将数据帧拼接在一起,而无需重新排序每个数据帧列

时间:2018-10-21 00:03:47

标签: r dataframe

我目前正在尝试在R中垂直堆叠三个数据帧,以便保持数据干净。问题在于每个帧的顺序都不同,我不希望R重新排序每列以匹配第一个数据帧中的列顺序。数据帧如下所示:

df.1
        X1   X2   X3   X4
NA       A    B    C    D
200301   2    4    5    6
200302   4    5    8    9

df.2
        X3   X1   X3   X2     
NA       C    A    D    B
200401   3    1    5    7
200402   2    9    6    4

df.3
        X4   X3   X2   X1     
NA       D    C    B    A
200501   5    4    5    6
200502   8    2    3    8

我希望它们垂直连接,使它们看起来像这样,显然它们之间没有列标签。我实质上是在尝试做与复制和粘贴彼此下面的数据帧相同的事情。

df.4
        X1   X2   X3   X4    
NA       A    B    C    D
200301   2    4    5    6
200302   4    5    8    9
        X3   X1   X3   X2             
NA       C    A    D    B
200401   3    1    5    7
200402   2    9    6    4
        X4   X3   X2   X1
NA       D    C    B    A
200501   5    4    5    6
200502   8    2    3    8

有没有办法实现这一目标?我的容貌不错,似乎找不到任何可以帮到我的东西。感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

NA,因为不支持行名,因此我添加了一列。

想法是先重命名列,然后应用do.callrbind

dfs <- list(df.1, df.2, df.3)

dfs <- lapply(dfs, setNames, paste0("V",1:ncol(dfs[[1]])))
res <- do.call(rbind, dfs)
res
#       V1 V2 V3 V4 V5
# 1     NA  A  B  C  D
# 2 200301  2  4  5  6
# 3 200302  4  5  8  9
# 4     NA  C  A  D  B
# 5 200401  3  1  5  7
# 6 200402  2  9  6  4
# 7     NA  D  C  B  A
# 8 200501  5  4  5  6
# 9 200502  8  2  3  8

数据

df.1 <- read.table(header=TRUE,stringsAsFactors=FALSE,text="X0 X1   X2   X3   X4
NA       A    B    C    D
200301   2    4    5    6
200302   4    5    8    9")

df.2 <- read.table(header=TRUE,stringsAsFactors=FALSE,text="X0 X3   X1   X3   X2     
NA       C    A    D    B
200401   3    1    5    7
200402   2    9    6    4")

df.3 <- read.table(header=TRUE,stringsAsFactors=FALSE,text="X0 X4   X3   X2   X1     
NA       D    C    B    A
200501   5    4    5    6
200502   8    2    3    8")