【问题标题】:Error in data frame undefined columns selected选择的数据框未定义列中的错误
【发布时间】:2014-07-03 05:08:44
【问题描述】:

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

【问题讨论】:

    标签: r


    【解决方案1】:

    你是什么意思?

    data2 <- data1[good,]
    

    data1[good]
    

    您以错误的方式选择列(使用完整行的逻辑向量)。

    考虑不使用参数pollutant;它是您要提取的列名吗?如果是这样,它应该是这样的

    data2 <- data1[good, pollutant]
    

    进一步考虑你必须在for循环内rbinddata.frames,否则你只能得到最后一个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
    

    【讨论】:

    • 感谢您的信息。我在文档中查找了 sprintf 但真的不明白。我回家后会试试你的答案
    • @DougFirr 它创建一个字符向量,每个元素为 3 个字符,右对齐,数字来自 id。之后我用 0 替换所有左边的空格
    • 好的,谢谢。所以 sprintf("%3d", 中的 3 大概是向量的长度,但是 "d" 和 % 是干什么用的?
    • 再次感谢@Luca 提供的示例。我想我现在理解了这个例子中的逻辑。嵌套公式的使用很棘手,因为它对我来说是新语言,感谢。
    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多