2017-12-10 14 views
0

Rの新機能で、プログラムの最後にデータフレームの列名を変更しなければならない理由がわかりません。データフレームの使用は、ID列の下にシーケンスを保存しなければならない2つの列と、NOBS列にある何らかの種類の番号を持っています。Rデータフレーム列名の変更

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

    collectCounts = data.frame(id=numeric(), nobs=numeric()) 

    for(i in id) { 
    fileName = sprintf("%03d",i) 
    fileLocation = paste(directory, "/", fileName,".csv", sep="") 

    fileData = read.csv(fileLocation, header=TRUE) 
    completeCount = sum(!is.na(fileData[,2]), na.rm=TRUE) 

    collectCounts <- rbind(collectCounts, c(id=i, completeCount)) 
    #print(completeCount) 

    } 

    colnames(collectCounts)[1] <- "id" 
    colnames(collectCounts)[2] <- "nobs" 
    print(collectCounts) 

} 
+0

あなたの目標はこれを書いている何コード? – chachimouchacha

答えて

1
あなたの特定の問題は、あなたが complete and verifiable exampleを提供しなかったとして、何であるか

その非常に明確ではありません。それでもコードを改善するためのいくつかの指針を与えることができます。

1)ループ内でdata.frameを '拡張'することは推奨されません。これは、毎回構造全体をコピーするので、Rでは非常に非効率的です。 data.frame全体を最初に割り当て、ループ内の行を埋める方がよいでしょう。

2)Rにはpaste0という便利な機能があり、sep = ""を指定する必要はありません。

3)is.naが一緒にこれを置くNAの

を返すことはありませんので、ごsumna.rm = TRUEを指定する必要はありません:

complete = function(directory, id = 1:332) { 
    collectCounts = data.frame(id=id, nobs=numeric(length(id))) 
    for(i in 1:length(id)) { 
    fileName = sprintf("%03d", id[i]) 
    fileLocation = paste0(directory, "/", fileName,".csv") 
    fileData = read.csv(fileLocation, header=TRUE) 
    completeCount = sum(!is.na(fileData[, 2])) 
    collectCounts[i, 'nobs'] <- completeCount 
    } 
} 
0
常に

ハードは、例えば、データのない質問に答えるためには。あなたは

collectCounts = data.frame(id, nobs=NA) 

そして、あなたのループ内で開始することができ

、ん:ここで

collectCounts[i, 2] <- completeCount 

はこれを行うための別の方法です:

complete <- function(directory, id = 1:332) { 
    nobs <- sapply(id, function(i) { 
      fileName = paste0(sprintf("%03d",i), ".csv") 
      fileLocation = file.path(directory, fileName) 
      fileData = read.csv(fileLocation, header=TRUE) 
      sum(!is.na(fileData[,2]), na.rm=TRUE) 
     } 
    ) 
    data.frame(id=id, nobs=nobs) 
} 
+0

あなたのコメントをありがとう、私はあなたの貴重なフィードバックをより良く理解しています。 –

関連する問題