如何在R中堆叠数据?

时间:2013-06-24 09:45:00

标签: r merge dataset

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

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

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分: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))

list.files参数:

  • full.names = TRUE将返回文件的完整路径。假设您的in_pth <- "c:\\my_csv_folder"并且在其中有两个文件:01.csv and 02.csv。然后,full.names=TRUE将返回c:\\my_csv_folder\\01.csvc:\\my_csv_folder\\02.csv完整路径)。

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

  • pattern=\\.csv$:这是一个正则表达式,用于指示要加载的文件类型。如果您的文件夹,除了csv文件还有文本文件(.txt),那么通过指定此模式,您将只加载csv个文件。如果您的文件夹只有CSV文件,则无需这样做。


data.table函数:

  • rbindlist通过保留以前data.table的名称来避免列名冲突。也就是说,如果您分别有两个data.table dt1, dt2列名为x,ya,b,那么执行rbindlist(dt1,dt2)将会更改{{1} } a,bx,y会将rbindlist(dt2, dt1)更改为x,y

  • a,b最常自动处理列,标题分隔符等等。并且非常快(虽然仍然是实验性的,所以您可能需要检查输出以确保它一切正常(即使稳定))。

答案 1 :(得分:0)

@Denis:同样值得查看plyr包。 rbind.fill(...)允许您按行组合data.frames。

install.packages("plyr")
library(plyr)

help (rbind.fill)有关详细信息,可以提供以下信息:

rbinds填充NA缺失列的数据框列表。

用法

rbind.fill(...) 参数

... 将数据帧输入到行绑定在一起。第一个参数可以是数据框列表,在这种情况下,所有其他参数都将被忽略。

详细

这是rbind的增强功能,可添加所有输入中不存在的列,接受数据帧列表,并且操作速度更快。

输出中的列名称和类型将按其遇到的顺序显示。不执行检查以确保每列在输入中具有一致的类型。

据我所知,没有cbind.fill;但是,有一个用户函数cbind.fill允许您按列组合data.frames。详情here

有两种解决方案:一种取决于rbind.fill中的plyr package,另一种取决于rbind.fill

答案 2 :(得分:-1)

另一种方法,不使用外部包,就是使用cbind()命令:它使每列绑定..所以如果你有不同的表,你可以将它们作为参数传递给cbind(),它们将是所附