将两个或多个表合并成一个表(Append\Union)

8

我使用read.table将5个文本数据集输入R中。每个数据集具有相同的结构(100行,50列)。 我想将这五个表格联合/追加到一个表格中,该表格将是500行*50列。 有人知道如何做到这一点吗?


2
知道了,那不是联合的意思。 - Frank
我尝试了使用联合(Union),但它变成了一个很大的列表,不再是一个表格。 - qqqwww
4
我投票支持重新打开这个问题,因为我认为这个问题不太宽泛,原因是提问者已经接受了一个回答,清楚地说明他们所说的“联合”是指 SQL 中的“union”。顺便说一下,我正在查找“如何从 dplyr 对 SQL 表执行 union ”,而 Google 将这个问题作为第一个结果指向了我。 - Alex
3个回答

16

来自包 dplyr

install.packages('dplyr')
library(dplyr)
new_df <- bind_rows(table1, table2, table3, table4, table5)

这有什么问题吗? - Raphael K
我也没有看到任何问题。实际上,bind_rowsrbind更高效。 - Psidom
我也看不出有什么问题,所以从这里点赞。也许有人认为为这么简单的问题使用软件包是“杀鸡焉用牛刀”。虽然通常情况下更快(如@Psidom所指出的),但在这里数据大小非常小,实际上并不重要(可能)。 - Anders Ellern Bilgrau
1
但是dplyr太棒了.... :) - Raphael K
AEBilgrau的方法可行。但我也尝试了你的方法。我安装了包并使用bind_rows来绑定表格。但是出现了错误:无法找到函数“bind_rows”。然后我使用dplyr::bind_rows,接着又出现了另一个错误:警告信息: 1: 在rbind_all(x, .id)中:不等因子水平:强制转换为字符。在最终数据集中,部分行的部分内容丢失了。 - qqqwww
你必须先安装包。我将编辑上面的代码以包括它。但是,我不知道是什么导致了那个错误。 - Raphael K

7

在基础R中,你可以执行以下操作:

# Create some toy data first
nc <- 50
nr <- 1000

# Create five tables with nc columns and nr rows.
df1 <- as.data.frame(replicate(nc, rnorm(nr)))
df2 <- as.data.frame(replicate(nc, rnorm(nr)))
df3 <- as.data.frame(replicate(nc, rnorm(nr)))
df4 <- as.data.frame(replicate(nc, rnorm(nr)))
df5 <- as.data.frame(replicate(nc, rnorm(nr)))

# Join the tables
df <- rbind(df1, df2, df3, df4, df5)
dim(df)
#[1] 5000   50

如果您需要的是5个叠在一起的表格,那么这将为您提供。如果不是,请至少提供一个说明您问题的示例。


谢谢。这正是我要找的。我是R的新手。 - qqqwww

7

即使对于这个特定问题来说没有关系,但比较不同的rbind方法仍然有帮助。下面是从base、data.table和dplyr中比较三种rbind方法的内容;

> dim(df)
[1] 16777216        2

> microbenchmark(rbind(df,df), rbindlist(list(df,df)), bind_rows(df,df), times = 10)
Unit: milliseconds
                    expr       min        lq      mean    median        uq       max neval cld
           rbind(df, df) 3824.4208 4052.6405 4288.5569 4239.2416 4557.5736 4685.2155    10   c
 rbindlist(list(df, df))  272.5048  304.8365  348.0393  357.4388  390.7684  405.0778    10 a  
       bind_rows(df, df)  571.1732  596.2556  715.1572  643.8038  863.5805  927.0341    10  b 

1
谢谢你,Psidom。 - qqqwww

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接