2

我正在使用以下代码从文件中提取完整案例的数量:

complete <- function(directory, id=1:332) {
    sapply(id, fn, directory)}


fn <- function(id, directory) {
    zero <- sprintf("%03d", id)
    name <- paste(directory,"/",zero,".csv",sep="")
    frame <- read.csv(name)
    ok <- complete.cases(frame)
    return(c("nobs"=sum(ok),"id"=id)) }

然后,例如:

complete("specdata",1:12)

此代码返回:

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
nobs  117 1041  243  474  402  228  442  192  275   148   443    96
id      1    2    3    4    5    6    7    8    9    10    11    12

但是,我希望它返回以下类型的数据框:

在此处输入图像描述

我不确定我做错了什么。谢谢!

4

3 回答 3

4

sapply正在返回matrix这里。您可以通过以下方式获得所需的形状和类型:

as.data.frame(t(complete("specdata",1:12)))

或者把它放在complete函数中,围绕对sapply. tmatrix行转换为列,并将as.data.frame其强制转换为列。

于 2013-01-17T14:55:36.317 回答
0

你的代码没问题。为了获得您想要的结果,请使用

t(sapply(id, fun, directory))

而不是sapply(id, fun, directory).

您的代码应如下所示;

complete <- function(directory, id=1:332) {
    t(sapply(id, fn, directory))}
于 2013-01-18T11:37:53.370 回答
0
complete <- function(directory, id = 1:332) {

 as.data.frame(t(sapply(id, fn, directory)))




}

fn <- function(id, directory){
if(is.numeric(id)){                                                         
id=id
}else{
id = as.numeric(id)
}
fileName  <- paste(paste(directory,'/',sep=''),paste(id,'.csv',sep=''),sep='')
data  <- read.csv(fileName )
tows <- (complete.cases(data))
rowsNum <- nrow(data[tows,])
return(c("id"=as.numeric(id),"nobs"=rowsNum))

}
于 2014-01-19T15:21:22.297 回答