如何编写for循环以将多个csv文件读入R并对数据进行子集化以为ggplots创建干净的数据帧?

问题描述 投票:0回答:1

我试图将多个csvs读入R,然后通过删除我不需要使用'subset'函数的列来对这些csvs进行子集化。我正在尝试在r中设置for循环,我可以将函数或计算添加到csvs列表中,以便稍后为ggplots或stat分析生成数据帧。 (我目前安装了tidyverse,dplyr和ggplot2)。现在我只想对csv进行子集化,然后根据子集化数据创建数据帧。

我使用for循环通过设置工作目录,创建csvs列表,然后将它们读入数据帧,成功地将多个csv读入单独的数据帧。这当前为以原始文件名命名的每个csv输出一个数据帧:

filenames <- gsub("\\.csv$","", list.files(pattern="\\.csv$"))


for(i in filenames){
     assign(i, read.csv(paste(i, ".csv", sep="")))}

然后我意识到我想在将这些数据放入数据帧之前对这些数据进行子集化,以避免以后出现重复的代码;但是,每次我尝试向for循环添加子集函数时,我都会收到错误。这就是我目前拥有的:

for(i in filenames){
  read.csv(i)
  subset(i, select = c("names", "of columns", "I want"))
  assign(i, read.csv(paste(i, ".csv", sep="")))
}

我收到“没有这样的文件或目录错误”。我确信我缺少一些明显的东西,因为我的R基础很差,但任何帮助或建议使这项工作将不胜感激。子集函数过去对我有用,但我必须为每个数据帧写出一个新行,并希望通过使用list和for循环或其他方法来避免这种情况。

谢谢

r loops subset gsub assign
1个回答
0
投票

我最终使用@MrFlick建议并完全使用lapply来规避循环,并将所有文件合并到一个数据帧中并从那里进行子集化。最终结果如下:

filenames = list.files(pattern="*.csv")
filenames

myfiles = do.call(rbind, lapply(filenames, function(x) read.csv(x, stringsAsFactors = FALSE)))

myfiles


myfiles.subset = subset(myfiles, select = c("names of", "columns", "I want")
© www.soinside.com 2019 - 2024. All rights reserved.