R - 对读取csv

时间:2015-12-11 14:48:20

标签: r csv dynamic reference

我想制作一个从正确文件夹中读取数据的脚本。我的代码中有几行引用了foldername,因此我想让它变得动态。是否可以动态引用文件夹名称?请参阅下面我想做的事情

# Clarifies the name of the folder, afterwards "Foldername" will be used as reference
FolderA <- Foldername
# Read csv to import the data from the selected location
data1 <- read.csv(file="c:/R/Foldername/datafile1.csv", header=TRUE, sep=",")
data2 <- read.csv(file="c:/R/Foldername/datafile2.csv", header=TRUE, sep=",")

我试图获得与此代码相同的结果:

data1 <- read.csv(file="c:/R/FolderA/datafile1.csv", header=TRUE, sep=",")
data2 <- read.csv(file="c:/R/FolderA/datafile2.csv", header=TRUE, sep=",")

有人可以澄清如何使这种动态成为可能吗?

3 个答案:

答案 0 :(得分:3)

您可以使用paste0

FolderA <- "Foldername"
paste0("c:/R/", FolderA, "/datafile1.csv")
#[1] "c:/R/Foldername/datafile1.csv"

所以在你的情况下:

data1 <- read.csv(file=paste0("c:/R/", FolderA, "/datafile1.csv"), header=TRUE, sep=",")

答案 1 :(得分:1)

对@ LyzandeR的回答略有概括,

make_files <- function(directory, filenames) {
  sprintf("C:/R/%s/%s", directory, filenames)
}
##
Files <- sprintf("file%i.csv", 1:3)
##
make_files("FolderA", Files)
#[1] "C:/R/FolderA/file1.csv" "C:/R/FolderA/file2.csv" "C:/R/FolderA/file3.csv"

答案 2 :(得分:0)

您也可以尝试以下方法。循环将创建一个包含输出文件的列表,但如果您的文件都具有相同的列名,则可以将它们组合在一起(方法2)。此方法允许您指定文件夹,然后使用list.files函数提取扩展名为&#34; .csv&#34;的所有文件。这样,如果你在一个文件夹中有很多csv文件,你就不必单独写出来。

# Specify working directory or location of files:
FolderA = "c:/R/Foldername"

# identify all files with specific extension:
files = list.files(FolderA,pattern="*.csv")

方法1 - 按列表分开

data = NULL
for(i in 1:length(files)){
  data[[i]] = read.csv(files[i],header=F,stringsAsFactors=F)
}

方法2 - 单个数据帧

data = NULL
for(i in 1:length(files)){
  df = read.csv(files[i],header=F,stringsAsFactors=F)
  data = rbind(data,df)
}