我一直致力于一项任务,我必须从目录“specdata”中读取一些csv文件。这些文件非常相似,共有332个标题为001.csv - 332.csv。如果重要的话,它们具有一致的列和标题。
我相信我已经接近了,但我正在绊倒上述错误消息
“
[.data.frame
中的错误(data1,good):选择了未定义的列”
我原本期望一个数据框加载id参数中文件子集指定的所有数据。
pollutantmean <- function(directory, pollutant, id = 1:332) {
files <- list.files(directory)
subsetFiles <- files[id]
for (i in subsetFiles) {
filepaths <- paste(directory,"/",i, sep='')
data1 <- read.csv(filepaths)
}
data1
good <- complete.cases(data1)
data2 <- data1[good]
data2
}
# test it out and ignore middle parameter for now
pollutantmean("specdata", "pass", 1:3)
答案 0 :(得分:7)
data2 <- data1[good,]
使用
data1[good]
您以错误的方式选择列(使用完整行的逻辑向量)。
考虑不使用参数pollutant
;它是您要提取的列名称吗?如果是这样的话应该是
data2 <- data1[good, pollutant]
此外,请考虑rbind
循环内data.frame
for
,否则只获取最后一个data.frame(其completed.cases)
最后但并非最不重要的是,我更喜欢使用
生成文件名id <- 1:322
paste0( directory, "/", gsub(" ", "0", sprintf("%3d",id)), ".csv")
?sprintf
字符串fmt
(在我们的例子中为"%3d"
)包含传递给输出字符串的普通字符,以及对提供的参数进行操作的转换规范通过...
。允许的转换规范以 %
开头,并以集aAdifeEgGosxX%
中的一个字母结尾。这些字母表示以下类型:
d
:整数例如更一般的例子
sprintf("I am %10d years old", 25)
[1] "I am 25 years old"
^^^^^^^^^^
| |
1 10