如何在R中堆叠数据?

REn*_*ast 5 merge r dataset

我有20个不同的.csv文件,我需要一些如何在R中堆叠数据,以便我可以获得数据的整体情况.现在我正在复制并粘贴excel中的列以创建一个大数据集.但是,我确信在R中有更快更有效的方法,因为这最终需要一段时间.

另外,为了使事情变得更糟,一些变量名在每个数据集中都不相同.例如,VARIABLE1在某些数据集中被写为variable1.我如何在R中纠正这一点,因为我理解R是区分大小写的?

任何帮助将不胜感激.谢谢!

Aru*_*run 3

如果您(或希望您)熟悉data.table包,最简单和最快的方法是这样(未经测试):

require(data.table)
in_pth <- "path_to_csv_files" # directory where CSV files are located, not the files.
files <- list.files(in_pth, full.names=TRUE, recursive=FALSE, pattern="\\.csv$")
out <- rbindlist(lapply(files, fread))
Run Code Online (Sandbox Code Playgroud)

list.files参数:

  • full.names = TRUE将返回文件的完整路径。假设您的in_pth <- "c:\\my_csv_folder"和 里面有两个文件:01.csv and 02.csv. 然后,full.names=TRUE将返回c:\\my_csv_folder\\01.csvand c:\\my_csv_folder\\02.csv完整路径)。

  • recursive = FALSE不会搜索文件夹内的目录in_pth。假设您还有两个 csv 文件c:\\my_csv_folder\\another_folder。现在,如果您想将这些文件加载​​到此目录中,那么您可以设置recursive=TRUE,它将扫描文件,直到到达向下搜索的所有目录。

  • pattern=\\.csv$:这是一个正则表达式,用于告知要加载哪种类型的文件。如果您的文件夹除了 csv 文件之外还包含文本文件 (.txt),则通过指定此模式,您将仅加载文件csv。如果您的文件夹仅包含 CSV 文件,则不需要这样做。


数据.表函数:

  • rbindlist通过保留先前 data.table 的名称来避免列名称冲突。也就是说,如果您有两个分别具有列名和 的data.tables ,则执行操作将负责更改为和并将负责更改为。dt1, dt2x,ya,brbindlist(dt1,dt2)a,bx,yrbindlist(dt2, dt1)x,ya,b

  • fread通常会自动处理列、标题分隔符等......并且速度非常快(尽管仍处于实验阶段,因此您可能需要检查输出以确保一切正常(即使稳定))。