gpt4 book ai didi

r - 使用循环将多个 data.frame 合并为一个 data.frame

转载 作者:行者123 更新时间:2023-12-02 05:25:31 24 4
gpt4 key购买 nike

我正在尝试将多个data.frames合并为一个data.frame。因为我有一个完整的文件列表,所以我尝试使用循环结构来完成它。

到目前为止,循环方法运行良好。然而,它看起来效率很低,我想知道是否有更快、更简单的方法。

场景如下:我有一个包含多个 .csv 文件的目录。每个文件包含相同的标识符,可以用作合并变量。由于文件相当大,我想一次将每个文件读入 R,而不是一次读取所有文件。因此,我使用 list.files 获取该目录的所有文件,并读取前两个文件。然后我使用 merge 来获取一个 data.frame

FileNames <- list.files(path=".../tempDataFolder/")
FirstFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[1], sep=""),
header=T, na.strings="NULL")
SecondFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[2], sep=""),
header=T, na.strings="NULL")
dataMerge <- merge(FirstFile, SecondFile, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
all=T)

现在,我使用 for 循环获取所有剩余的 .csv 文件,并将它们合并到已经存在的数据中。框架:

for(i in 3:length(FileNames)){ 
ReadInMerge <- read.csv(file=paste(".../tempDataFolder/", FileNames[i], sep=""),
header=T, na.strings="NULL")
dataMerge <- merge(dataMerge, ReadInMerge, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
all=T)
}

尽管它工作得很好,但我想知道是否有更优雅的方式来完成工作?

最佳答案

您可能想仔细看看 related question on stackoverflow .

我将分两步解决此问题:导入所有数据(使用 plyr),然后将其合并在一起:

filenames <- list.files(path=".../tempDataFolder/", full.names=TRUE)
library(plyr)
import.list <- llply(filenames, read.csv)

这将为您提供现在需要合并在一起的所有文件的列表。有很多方法可以做到这一点,但这里有一种方法(使用 Reduce):

data <- Reduce(function(x, y) merge(x, y, all=T, 
by=c("COUNTRYNAME", "COUNTRYCODE", "Year")), import.list, accumulate=F)

或者,如果您对 Reduce 不满意,也可以使用 reshape 包来完成此操作:

library(reshape)
data <- merge_recurse(import.list)

关于r - 使用循环将多个 data.frame 合并为一个 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2209258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com