使用table(,sum())时出错。参数长度不一样?

时间:2019-11-13 06:48:59

标签: r

我正在尝试创建一个具有两列的表。第一列是文件编号,第二列是每个文件中完整案件的数量。

我设法编写了一个函数,该函数将所需的单个文件处理到一个数据框中(几乎全部取自Coursera)。我能够使用此功能查找特定列的均值,因此我认为它可以工作。

但是,我得到的错误是我的参数没有相同的长度。另外,桌子看起来也不像我想要的样子。我想知道是否有人可以看看它,并指出正确的方向。

无论如何,这是我的代码,以及出现的错误:

to.use <- list.files('specdata', full.names = TRUE)
all.data <- data.frame()
complete.table <- data.frame()
complete <- function(directory, id = 1:332) {
                for (i in id) {
                  all.data <- rbind(all.data, read.csv(to.use[i]))
                }
            subset_ad <- all.data[which(all.data[,"ID"] %in% id),]
            table(id, "nobs" = sum(complete.cases(subset_ad)))
}
> complete("specdata", 1)
   nobs
id  117
  1   1
> complete("specdata", c(2,4,8,10,12))
Error in table(id, nobs = sum(complete.cases(subset_ad))) : 
  all arguments must have the same length

谢谢!

1 个答案:

答案 0 :(得分:0)

对于遇到这个问题并且对(部分答案)感兴趣的任何人,我都设法重新设计了我的情况并完成了这部分作业。

这是最终代码和最终结果。

to.use <- list.files('specdata', full.names = TRUE)
all.data <- data.frame()
comp_cas <- data.frame()
complete <- function(directory, id = 1:332) {
                for (i in id) {
                  all.data <- rbind(all.data, read.csv(to.use[i]))
                  subset_ad <- subset(all.data, ID %in% i)
                  comp_cas <- rbind(comp_cas, as.numeric(summary(complete.cases(subset_ad))[3]))
                }
                  cbind(id, "nobs" = unlist(comp_cas, use.names = FALSE))
}
complete("specdata", 1)
complete("specdata", c(2,4,8,10,12))
complete("specdata", 30:25)
complete("specdata", 3)

     id nobs
[1,]  1  117
     id nobs
[1,]  2 1041
[2,]  4  474
[3,]  8  192
[4,] 10  148
[5,] 12   96
     id nobs
[1,] 30  932
[2,] 29  711
[3,] 28  475
[4,] 27  338
[5,] 26  586
[6,] 25  463
     id nobs
[1,]  3  243