我有 20 个不同的 .csv 文件,我需要一些如何在 R 中堆叠数据,以便我可以全面了解数据。目前我正在复制和粘贴 excel 中的列以制作一个大数据集。但是,我确信在 R 中有一种更快、更有效的方法,因为这最终需要一段时间。
此外,更糟糕的是,每个数据集中的一些变量名称并不相同。例如 VARIABLE1 在某些数据集中写为 variable1。我将如何在 R 中纠正这一点,因为我知道 R 区分大小写?
任何帮助将不胜感激。谢谢!
如果您(或希望您)熟悉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.csv
和c:\\my_csv_folder\\02.csv
(完整路径)。
recursive = FALSE
不会在您的文件夹内的目录in_pth
中搜索。假设您在c:\\my_csv_folder\\another_folder
. 现在,如果你想在这个文件中加载这些文件,那么你可以设置recursive=TRUE
,它将扫描文件,直到你找到所有目录搜索下来。
pattern=\\.csv$
:这是一个正则表达式,用于告诉要加载哪种文件。如果您的文件夹除了 csv 文件之外还有文本文件 (.txt),那么通过指定此模式,您将只加载csv
文件。如果您的文件夹只有 CSV 文件,则不需要这样做。
rbindlist
通过保留前一个 data.table 的名称来避免列名冲突。也就是说,如果您有两个data.table
s分别dt1, dt2
具有列名x,y
和a,b
,那么 doingrbindlist(dt1,dt2)
将负责更改a,b
为x,y
并将rbindlist(dt2, dt1)
负责更改x,y
为a,b
。
fread
最常自动处理列、标题分隔符等。而且速度非常快(尽管仍处于试验阶段,因此您可能需要检查输出以确保一切正常(即使稳定))。
@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。详情在这里。
有两种解决方案:一种依赖于rbind.fill
,plyr package
另一种独立于rbind.fill
。
另一种不使用外部包的方法是使用 cbind() 命令:它对每列进行绑定。所以如果你有不同的表,你可以将它们作为参数传递给 cbind(),它们将被附加