数据框中的错误:参数意味着行数不同

时间:2017-05-02 16:31:15

标签: r dataframe

尽管阅读了有关此错误的现有答案,但我仍然不知道如何解决此问题。

我必须在文件列表中获得完整案例的总和。每个文件(例如file1对应一个id(例如file1的id1)。我的目标是获得一个数据框,其中包含每个id的完整个案的数量(因此对于每个文件,因为file1包含id1的污染物,而file2包含id2的污染物等)

当我运行该功能时:complete("pollu", 1:10) - >一切都很完美

但是当我运行这些功能时:

 complete("pollu", 34)

我得到ID 34次,33次返回NA并最终返回完整病例数。

 complete(".", c(2, 4, 8, 10, 12)) 

我收到错误:

  

data.frame(id,nobs)中的错误:参数意味着数量不同   行:5,12

理解错误并修复它的任何帮助都将不胜感激。

complete <- function(directory,id=1:332) {
  nobs <- vector()
  files <- list.files(directory)

  for (i in id) {
    ID <- id
    file <- read.csv(files[i])
    nobs[i] <- sum(complete.cases(file),na.rm = TRUE)

}

df <- data.frame(ID,nobs)
colnames(df) <- c("ID", "nobs")
return (df)

}

1 个答案:

答案 0 :(得分:3)

问题在于for循环以及您如何为nobs[i]

分配值
complete("pollu", 34)

循环仅使用i <- 34运行一次。但是您将结果分配给nobs[i],实际上是nobs[34]。这将为您提供一个分配了第34个值的向量,默认情况下保留其他NA

complete(".", c(2, 4, 8, 10, 12)) 

循环遍历 5 值。最大的一个是 12 。在最后一次迭代中,您为nobs[12]分配了一个值,因此nobs向量的长度为12,而i的长度仅为5。

修复

 for (i in seq_along(id))) {
    ID <- id[i]
    file <- read.csv(files[ID])
    nobs[i] <- sum(complete.cases(file),na.rm = TRUE)
}

我将取值1,2,3 ..直到你需要的id数。

修改

由于id已包含您需要的标签,您可以使用

df <- data.frame(id, nobs)