在R中将多个CSV文件读入数据框

6

我已经被这个问题困扰很久了,我读了很多博客并尝试了不同的方法,但是我仍然得到同样的错误,而且我不明白我的代码哪里出错了。我正在尝试一次性将几个csv文件全部导入R中,但是我一直得到以下错误。

没有这样的文件或目录错误在文件(文件,“rt”)中:无法打开连接

`Tea_ONE <- "~/Desktop/Circadian Rhythms 
   Sem/Project/Tea_Party_ONE/Tea_Party_ONE_Lumicycle_data/"

      files <- list.files(path = Tea_ONE, pattern = ".csv$")

 for(i in 1:length(files)){
     assign(files[i],
     read.csv(paste(Tea_ONE, files[i], header = T, skip = 1)))
  }`

所有CSV文件都位于Tea_Party_ONE_Lumicycle_data中。
感谢任何帮助。

1
@RonakShah 注意,OP正在将完整路径粘贴在一起。问题实际上可能是默认的paste()设置会向路径添加一个空格。更不用说错误地将read.csv参数传递给paste()了。 - joran
@joran 是的,我错过了那个。谢谢。你是对的,这一定是由于“paste”参数中默认添加了一个额外的空格。 OP 应该尝试使用 paste0 - Ronak Shah
3个回答

18

有很多种方法!!

setwd("C:/your_path_here")
fnames <- list.files()
csv <- lapply(fnames, read.csv)
result <- do.call(rbind, csv)


********  ********  ********  ********  ********  ********  ********  ********  ********  ********  


filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind,lapply(file_names,read.csv))


********  ********  ********  ********  ********  ********  ********  ********  ********  ********  


filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind, lapply(file_names, read.csv, skip = 1, header = FALSE))


********  ********  ********  ********  ********  ********  ********  ********  ********  ********  


filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind, lapply(file_names, read.csv, header = FALSE))


********  ********  ********  ********  ********  ********  ********  ********  ********  ******** 


# 
temp <- setwd("C:/your_path_here")
temp = list.files(pattern="*.csv")
myfiles = lapply(temp, read.delim)


********  ********  ********  ********  ********  ********  ********  ********  ********  ******** 


# Here is another options to convert the .csv files into one data.frame. Using R base functions. 
# This is order of magnitude slower than the options below.

files <- setwd("C:/your_path_here")
# Get the files names
files = list.files(pattern="*.csv")
# First apply read.csv, then rbind
myfiles = do.call(rbind, lapply(files, function(x) read.csv(x, stringsAsFactors = FALSE)))

library(readr)
library(dplyr)
tbl = lapply(files, read_csv) %>% bind_rows()


********  ********  ********  ********  ********  ********  ********  ********  ********  ******** 


# LIST OF FILE PATHS

library(readr)
library(stringr)

List_of_file_paths <- list.files(path ="C:/your_path_here/", pattern = ".csv", all.files = TRUE, full.names = TRUE)


********  ********  ********  ********  ********  ********  ********  ********  ********  ********


# LIST OF FILES IN FOLDER
xlist<-list.files(pattern = "*.csv")

for(i in xlist) { 
  x <- read.csv((i))
  assign(i, x)
    }


********  ********  ********  ********  ********  ********  ********  ********  ********  ********

7

如评论中所述,问题在于paste会添加空格分隔符。您可以使用paste0或者直接获取完整路径名。

library('tidyverse')

files <- list.files(path = Tea_ONE, pattern = '.csv$', full.names = T) %>%
  map(read_csv, skip = 1)

full.names = TRUE 参数非常好用 - 这样你就不需要改变你的工作目录了! - Agile Bean

2

使用purrr包中的map_dfr函数

library(purrr) 

列出目录中所有以csv结尾的文件

csv_files = list.files(path = 'data/folder/', pattern = "csv$", full.names = TRUE)

读取 csv 文件并放入数据框中

data_stacked <- map_dfr(csv_files, read_csv)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接