我正在尝试创建一个具有两列的表。第一列是文件编号,第二列是每个文件中完整案件的数量。
我设法编写了一个函数,该函数将所需的单个文件处理到一个数据框中(几乎全部取自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
谢谢!
答案 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