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ここに a を返していmatrixます。必要な形状とタイプを取得できます。

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

または、これをcomplete関数内の への呼び出しの周りに配置しますsapply。行を列にt転置し、そのように強制します。matrixas.data.frame

于 2013-01-17T14:55:36.317 に答える
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 に答える
0

あなたのコードはOKです。目的の結果を得るために使用する

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 に答える