r - 如何循环遍历 R 中的 CSV 文件文件夹

标签 r file loops csv

我有一个文件夹,其中包含一堆标题为“yob1980”、“yob1981”、“yob1982”等的 CSV 文件。

我必须使用 for 循环来遍历每个文件并将其内容放入数据框中 - 数据框中的列应该是“1980”、“1981”、“1982”等

这是我所拥有的:

file_list <- list.files()

temp = list.files(pattern="*.txt")
babynames <- do.call(rbind,lapply(temp,read.csv, FALSE))

names(babynames) <- c("Name", "Gender", "Count")

我觉得我需要一个 for 循环,但我不确定如何遍历文件。有人指出我正确的方向吗?

最佳答案

我最喜欢的方法是使用 ldply来自 plyr包裹。它具有返回数据帧的优点,因此您无需在之后执行 rbind 步骤:

library( plyr )
babynames <- ldply( .data = list.files(pattern="*.txt"),
                    .fun = read.csv,
                    header = FALSE,
                    col.names=c("Name", "Gender", "Count") )

作为额外的好处,您可以非常轻松地进行多线程导入,从而使大型多文件数据集的导入速度更快:
library( plyr )
library( doMC )
registerDoMC( cores = 4 )
babynames <- ldply( .data = list.files(pattern="*.txt"),
                    .fun = read.csv,
                    header = FALSE,
                    col.names=c("Name", "Gender", "Count"),
                    .parallel = TRUE )

稍微更改以上内容以包含 Year在结果数据框中的列中,您可以先创建一个函数,然后在 ldply 中执行该函数以同样的方式执行 read.csv
readFun <- function( filename ) {

    # read in the data
    data <- read.csv( filename, 
                      header = FALSE, 
                      col.names = c( "Name", "Gender", "Count" ) )

    # add a "Year" column by removing both "yob" and ".txt" from file name
    data$Year <- gsub( "yob|.txt", "", filename )

    return( data )
}

# execute that function across all files, outputting a data frame
doMC::registerDoMC( cores = 4 )
babynames <- plyr::ldply( .data = list.files(pattern="*.txt"),
                          .fun = readFun,
                          .parallel = TRUE )

这将以简洁整洁的方式为您提供数据,这就是我建议从这里向前推进的方式。虽然然后可以将每年的数据分成自己的列,但这可能不是最好的方法。

注意:根据您的喜好,转换 Year 可能是个好主意。列说,integer类(class)。但这取决于你。

关于r - 如何循环遍历 R 中的 CSV 文件文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063507/

相关文章:

java - 如何使用循环手动对字符数组进行排序?

python - 如何迭代创建新变量来存储列表的第 i 个值

r - 如何在 rgl 中绘制圆锥体的一部分?

r - ggplot2 中的卡特彼勒图

r - ggplot2 - y 轴标题上的两行或多行

java获取文件路径

python - 如何从 R 中的文本文件中删除行?

java - 如何存储文件字节并稍后再次创建该文件?

linux - 删除目录的符号链接(symbolic link)

c++ - 我的 For 循环出现段错误