R 从循环中读取文件
下面的代码部分包含两个循环。我有一些txt文件,我想在R中分别读取和分析,一个接一个。目前,我面临将它们导入R的问题。例如,第一个文件的名称是R 从循环中读取文件,r,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
“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")))
}
}
如何避免R假定原始文件名中存在的额外间隙?您应该将
粘贴替换为粘贴0
默认情况下,paste
使用空格作为分隔符,从而生成获得的结果。和paste0
不使用任何分隔符。您应该将paste
替换为paste0
默认情况下,paste
使用空格作为分隔符,从而生成获得的结果。而paste0
不使用任何分隔符。因为我不知道你的文件到底是什么样子,也许这对你没有帮助。。。但这就是我通过循环读取文件的方式:
第一:设置工作目录
setwd(“/Users/User 1/Documents/Folder 1”)
然后我总是将我的数据保存为一个excel文件和不同的工作表。在这个例子中,我的excel文件名为2000-2014,其中有15张不同的表格,第一张表格名为“2000”,第二张表格名为“2001”,依此类推
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
}
sheets因为我不知道你的文件到底是什么样子,也许这对你没有帮助。。。但这就是我通过循环读取文件的方式:
第一:设置工作目录
setwd(“/Users/User 1/Documents/Folder 1”)
然后我总是将我的数据保存为一个excel文件和不同的工作表。在这个例子中,我的excel文件名为2000-2014,其中有15张不同的表格,第一张表格名为“2000”,第二张表格名为“2001”,依此类推
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
}
sheets在这种情况下,我会避免循环,而选择lappy
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)
文件在这种情况下,我会避免循环,而选择lappy
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)
文件这有帮助。谢谢@slavutich我的问题解决了最初的问题,但我建议使用其他方法,由other发布,以获得更健壮和可配置的方法。这很有帮助。谢谢@slavutich我的问题解决了原来的问题,但我建议使用其他方法,由other发布,以获得更健壮和可配置的方式。谢谢。我用paste0
而不是paste
解决了这个问题。如果我需要将文件放在更大的数据框中,您的解决方案也很有用。谢谢。我用paste0
而不是paste
解决了这个问题。你的解决方案也很有用,以防我需要的文件在一个更大的数据框架。谢谢你的建议。我将看一看lappy
。现在,我用paste0
而不是paste
解决了这个问题。谢谢你的建议。我将看一看lappy
。现在,我通过使用paste0
而不是paste
解决了这个问题。
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)