我的工作文件夹中有一系列.csv文件,我写了一个代码来获取它们,做我想用它们做的所有事情,最后,将结果写在另一个文件中,在原始文件名中添加"_pp":
random <- grep(".csv",list.files(), fixed=TRUE)
files <- list.files()[random]
for (igau in 1:length(files))
{
(.......)
file <- paste("H:/METEO_data/AEMET_2/",files[igau],"_pp.csv",sep="")
write.table(d,file,row.names=TRUE, col.names=NA, sep=" ")
}
问题是当我想要的是"3059_pp.csv"时,我得到"3059.csv_pp.csv"。有没有办法把第一.csv拿出来?
谢谢
前两行可以简化为一个使用 pattern
参数的list.files
调用。 然后,您可以使用 gsub
更改输出文件名。
files <- list.files(pattern=".csv")
for(i in 1:length(files)) {
outFile <- file.path("H:/METEO_data/AEMET_2",
gsub(".csv", "_pp.csv", files[igau]))
write.table(d, outFile, row.names=TRUE, col.names=NA, sep=" ")
}
你也可以循环访问files
中的元素,但这假设你不需要igau
索引来做其他任何事情。 为了避免将来混淆自己,您可能希望避免将 file
用于变量名称,因为它是打开文件连接的基本包函数。
for(File in files) {
outFile <- file.path("H:/METEO_data/AEMET_2",
gsub(".csv", "_pp.csv", File))
write.table(d, outFile, row.names=TRUE, col.names=NA, sep=" ")
}
问题是files[igau]
包含.csv
扩展名。你必须做这样的事情:
basefile <- strsplit(files[igau], ".")
file <- paste("H:/METEO_data/AEMET_2/",basefile[0],"_pp.csv",sep="")
basefile[0]
将包含第一个.
之前的所有内容。这意味着如果您的文件名中带有点(即 3059.2.csv
)。如果是这种情况,那么你必须paste()
basefile
除了最后一个元素之外的所有元素,这将是你试图摆脱的csv
。