从循环中读取文件

时间:2016-02-21 00:08:13

标签: r

我有以下部分代码包含两个循环。我有一些txt文件,我想一个一个地分别在R中读取和分析。目前,我遇到了将它们导入R的问题。例如,第一个文件的名称是"C:/Users/User 1/Documents/Folder 1/1 1986.txt"。要在R中读取它,我做了以下循环:

## company
for(i in 1)
{
  ## year
  for(j in 1986)
  {
    df=read.delim(paste("C:/Users/User 1/Documents/Folder 1/", i, j, ".txt"), stringsAsFactors=FALSE, header=FALSE)
    df<-data.frame(rename(df, c("V3"="weight")))
  }
}

当我运行循环时,我收到以下错误:

Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'C:/Users/User 1/Documents/Folder 1/ 13 1986 .txt': No such file or directory

如何避免R假定存在于原始文件名称中的那些额外空白?

3 个答案:

答案 0 :(得分:1)

您应该将paste替换为paste0

默认情况下,paste使用空格作为分隔符,从而产生获得的结果。并且paste0不使用任何东西作为分隔符。

答案 1 :(得分:1)

因为我不知道你的文件究竟是什么样的,也许这对你没有帮助......但这就是我用循环阅读文件的方式:

首先:设置工作目录

setwd(&#34; / Users / User 1 / Documents / Folder 1&#34;)

然后我总是将我的数据保存为一个包含不同表格的excel文件。在这个例子中,我的excel文件中有15个不同的工作表,名为2000-2014,第一个工作表叫做#34; 2000&#34;,第二个工作表是#34; 2001&#34;等等。

sheets <- list() # creating empty list named sheets
for(i in 1:15){
 sheets[[i]] <- read_excel("2000-2014.xlsx", sheet = i) # every sheet will be one layer of the list sheets
 k <- c(2000:2014)
 sheet[[i]]$Year <- k[i] # to every listlayer I add a column "Year", matching the actual year my data is from 
}

不,我希望2000年到2014年的数据合并到一个大数据框中。我仍然可以逐一分析它们!

data <- do.call(rbind.data.frame, sheets)

整理我的数据并将其变成Hadley Wickham和ggplot2之类的形式(http://vita.had.co.nz/papers/tidy-data.pdf)我重组它:

data_restructed <- data %>% 
  as.data.frame() %>% 
  tidyr::gather(key = "categories", value = "values", 2:12) 

2:12因为在我的情况下,列2:12包含所有值,而第1列包含countrienames。现在,您将所有数据都放在一个大数据框中,并将它们分析为特定变量,如年份或类别或年份和类别等。

答案 2 :(得分:1)

在这种情况下,我会避免使用lapply。

Files <- list.files('C:/Users/User 1/Documents/Folder 1/', pattern = "*.txt")

fileList <- lapply(Files, FUN =- function(x){
  df <- read.delim(x, stringsAsFactors=FALSE, header=FALSE)
  df <- data.frame(rename(df, c("V3"="weight")))
  return(df)
})

do.call('rbind', fileList)