我一直在做一项任务,我必须从一个目录"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)
Run Code Online (Sandbox Code Playgroud)
你有意义吗?
data2 <- data1[good,]
Run Code Online (Sandbox Code Playgroud)
同
data1[good]
Run Code Online (Sandbox Code Playgroud)
你正在以错误的方式选择列(使用完整行的逻辑向量).
考虑pollutant不使用该参数; 它是您要提取的列名称吗?如果是这样的话应该是这样的
data2 <- data1[good, pollutant]
Run Code Online (Sandbox Code Playgroud)
此外,请考虑您必须在循环内部rbind使用data.frames for,否则您只获得最后一个data.frame(其completed.cases)
最后但并非最不重要的是,我更喜欢生成文件名,例如
id <- 1:322
paste0( directory, "/", gsub(" ", "0", sprintf("%3d",id)), ".csv")
Run Code Online (Sandbox Code Playgroud)
一点点修改过的 ?sprintf
字符串fmt(在我们的例子中"%3d")包含普通字符,它们传递给输出字符串,还包含对通过提供的参数进行操作的转换规范....允许的转换规范以a %开头,以该集合中的一个字母结束aAdifeEgGosxX%.这些字母表示以下类型:
d: 整数例如,一个更一般的例子
sprintf("I am %10d years old", 25)
[1] "I am 25 years old"
^^^^^^^^^^
| |
1 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95504 次 |
| 最近记录: |