我有以下部分代码包含两个循环。我有一些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假定存在于原始文件名称中的那些额外空白?
答案 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)