我目前正在尝试在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
有没有办法实现这一目标?我的容貌不错,似乎找不到任何可以帮到我的东西。感谢所有帮助!
答案 0 :(得分:0)
NA
,因为不支持行名,因此我添加了一列。
想法是先重命名列,然后应用do.call
和rbind
:
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")