首页 > 解决方案 > R中的read.csv()“输入中没有可用的行”错误

问题描述

我正在尝试遍历目录并读取列表中的所有文件。这些文件都来自这里https://github.com/CSSEGISandData/COVID-19的同一个 github 存储库

path = "~/Documents/Corona_Virus/COVID-19/archived_data/archived_daily_case_updates/"
setwd(path)
file.names<-list.files(path)
archived_DAYS<-lapply(file.names,read.csv,sep=",",header=T)

顺利进行,但随后

path2 = "~/Documents/Corona_Virus/COVID-19/csse_covid_19_data/csse_covid_19_daily_reports/"
setwd(path2)
daily_file_names<-list.files(path2)
daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")

抛出错误

“read.table 中的错误(file = file,header = header,sep = sep,quote = quote,:输入中没有可用的行”

但是,两个目录中的文件类型都是 .csv 文件,它们的结构都相同。我不明白为什么它会抛出该错误,因为每个文件都填充了数据

标签: rlapplyread.csv

解决方案


要在 R 中本地读取文件,可以执行以下操作。

  1. 在 Github 中分叉 COVID-19 存储库
  2. 将存储库克隆到您将运行 RStudio / R 的机器上
  3. 在 RStudio 中,从克隆的 COVID-19 存储库的根目录开始创建一个项目

此时当前的 R 工作目录是克隆的 Github 存储库的根目录。以下代码将检索所有每日归档文件并将它们读入数据框列表。

# 
# archived days data
# 
theFiles <- list.files("./archived_data/archived_daily_case_updates",pattern="*.csv",full.names = TRUE)

dataList <- lapply(theFiles,read.csv,stringsAsFactors=FALSE)

我们可以打印结果列表中第一个数据帧的前几行数据,如下所示。

> head(dataList[[1]])
  ï..Province.State Country.Region    Last.Update Confirmed Deaths Recovered Suspected
1             Anhui Mainland China 1/21/2020 10pm        NA     NA        NA         3
2           Beijing Mainland China 1/21/2020 10pm        10     NA        NA        NA
3         Chongqing Mainland China 1/21/2020 10pm         5     NA        NA        NA
4         Guangdong Mainland China 1/21/2020 10pm        17     NA        NA         4
5           Guangxi Mainland China 1/21/2020 10pm        NA     NA        NA         1
6           Guizhou Mainland China 1/21/2020 10pm        NA     NA        NA         1
> 

请注意,需要full.names = TRUE参数 inlist.files()以将路径包含在生成的文件名列表中。

> # show path names in list of files
> head(theFiles)
[1] "./archived_data/archived_daily_case_updates/01-21-2020_2200.csv"
[2] "./archived_data/archived_daily_case_updates/01-22-2020_1200.csv"
[3] "./archived_data/archived_daily_case_updates/01-23-2020_1200.csv"
[4] "./archived_data/archived_daily_case_updates/01-24-2020_0000.csv"
[5] "./archived_data/archived_daily_case_updates/01-24-2020_1200.csv"
[6] "./archived_data/archived_daily_case_updates/01-25-2020_0000.csv"
>

是什么导致了原帖中的错误?

原发帖人在对我的回答的评论中问为什么每日案例更新的代码失败了。我的假设是子目录中存在README.md文件导致read.csv()​​失败。由于我的答案pattern = '*.csv'在 中使用list.files(),因此它避免使用read.csv().

我运行了以下代码来测试这个假设。

# replicate original error
originalDirectory <- getwd()
path2 =paste0(originalDirectory, "/csse_covid_19_data/csse_covid_19_daily_reports")
setwd(path2)
daily_file_names<-list.files(path2)
daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")

我收到了与原始帖子中记录的相同的错误。

> # replicate original error
> originalDirectory <- getwd()
> path2 =paste0(originalDirectory, "/csse_covid_19_data/csse_covid_19_daily_reports")
> setwd(path2)
> daily_file_names<-list.files(path2)
> daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")
Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  no lines available in input
> 

添加pattern = '*.csv'到后list.files(),代码可以正常工作。

> # use pattern = "*.csv"
> daily_file_names<-list.files(path2,pattern = "*.csv")
> daily_DAYS<-lapply(daily_file_names,read.csv,sep=",")
> head(daily_DAYS[[1]])
  ï..Province.State Country.Region     Last.Update Confirmed Deaths Recovered
1             Anhui Mainland China 1/22/2020 17:00         1     NA        NA
2           Beijing Mainland China 1/22/2020 17:00        14     NA        NA
3         Chongqing Mainland China 1/22/2020 17:00         6     NA        NA
4            Fujian Mainland China 1/22/2020 17:00         1     NA        NA
5             Gansu Mainland China 1/22/2020 17:00        NA     NA        NA
6         Guangdong Mainland China 1/22/2020 17:00        26     NA        NA
>

推荐阅读