选中数据框未定义列时出错

Dou*_*Fir 5 r

我一直在做一项任务,我必须从一个目录"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)

Luc*_*lia 7

你有意义吗?

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)