【发布时间】:2017-04-01 23:11:11
【问题描述】:
所以我有一个文件夹目录(每年,从 1990 年到 2015 年),每个文件夹都有超过 100 多个 csv:
data/1990/alabama.csv
data/1990/alaska.csv
data/1990/arizona.csv
...
data/1991/alabama.csv
data/1991/alaska.csv
data/1991/arizona.csv
...etc.
我正在应用一个函数来清理每个 csv,并将其保存到另一个文件夹中。
到目前为止,我有这个 for 循环,它可以抓取所有文件名并将它们放入一个数据框中,其中每一行都是新的一年:
filepath <- "~/Desktop/project/data"
setwd(dir = filepath)
top_file_dir = dir()
indi_file_name = sapply(top_file_dir, dir)
filename = as.data.frame("", nrow = length(top_file_dir), ncol = 5000, stringsAsFactors = FALSE )
for (i in 1:length(top_file_dir)){
indi_file_name = sapply(top_file_dir[i], dir)
for (j in 1:length(indi_file_name))
filename[i,j] = paste(top_file_dir[i],indi_file_name[j],sep="/")
}
然后我有一个相当简单的函数来整理数据集:
general_clean <- function(currfile=filename) {
geo <- read.csv(file=paste(filepath,currfile,sep="/") , stringsAsFactors=FALSE, colClasses = c("area_fips"="character"))
# remove unwanted columns
keep <- c("area_fips", "year", "area_title")
geoClean <- geo[keep]
# export new data into csv
save_file = paste("~/Desktop/project/output",substring(currfile,21,last=1000),sep="/")
write.csv(geoClean, file=save_file)
}
# apply function, input each year by hand...[1,]=1990, [2,]=1991, etc.
sapply(filename[1,], general_clean)
这行得通,但我想添加一个步骤,将这些较小的 csv 中的每一个每年都放入一个新的 csv 中。这似乎涉及创建一个空列表并在“general_clean”函数中使用 rbind 来继续添加新数据?但这超出了我的 R 能力,到目前为止我所尝试的一切都是猜测。有什么建议吗?
【问题讨论】:
标签: r