我想制作一个从正确文件夹中读取数据的脚本。我的代码中有几行引用了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=",")
有人可以澄清如何使这种动态成为可能吗?
答案 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)
}