2017-03-15 13 views
0

日付コード(19960101はYYYYMMDD形式)で整理された.petファイルの情報に関する数百のファイルがあります。 02-01-ため、ファイル名に基づく列文字の追加R

私が達成しようとしている何
for (pet.atual in files.pet) { 
    data.pet.atual <- 
    read.table(file = pet.atual, 
       header = FALSE, 
       sep = ",", 
       quote = "\"",   
       comment.char = ";");  
    data.pet.atual <- cbind(data.pet.atual, NDate= pet.atual) 
} 

、例えば、1996年1月1日NDate = 19960101です:私は、日付コードでカラム、NDateを追加しようとしています1996年NDate = 19960102など。それでも、forループは最新のpet.atualアイデアで実行されるたびにNDateフィールドを置き換えます。ありがとう

+1

おそらく、増加する一連の列を持つforループの代わりに 'lapply'を使用するべきでしょう。 – Frank

+0

'for'ループの各パスで上書きされるのは' NEate'フィールドだけでなく、 'data.pet.atual'です。 – Uwe

答えて

2

小変更がトリックを行う必要があります。

data.pet.atual <- NULL 
for (pet.atual in files.pet) { 
    tmp.data <- 
    read.table(file = pet.atual, 
       header = FALSE, 
       sep = ",", 
       quote = "\"",   
       comment.char = ";");  
    tmp.data <- cbind(tmp.data, NDate= pet.atual) 
    data.pet.atual <- rbind(data.pet.atual, tmp.data) 
} 

をまた、あなたはまたによる再現性の例の不足のためにテストされていない(data.tableパッケージからfread()rbindlist()を試すことtmp.data$NDate <- pet.atual

1

はい、lapplyは、フランクの示唆しているように役立ちます。また、rbindを使用して各ファイルの日付を異ならせたいとします。線に沿って何か:

私は、私が再現可能な例なしでこれをテストすることはできません... files.petに含めたいすべてのファイルのリストである

my.fun<-function(file){ 
data <- read.table(file = file, 
      header = FALSE, 
      sep = ",", 
      quote = "\"",   
      comment.char = ";")  
data$NDate = file 
return(data)} 

data.pet.atual <- do.call(rbind.data.frame, lapply(files.pet, FUN=my.fun)) 

を想定していますそれで少し遊ぶ必要があるかもしれませんが、一般的なアプローチはうまくいくはずです!

2

によってtmp.data<-cbind(...)を置き換えることができます):

library(data.table) 
result <- rbindlist(lapply(files.pet, fread), idcol = "NDate") 
result[, NDate := anytime::anydate(files.pet[NDate])] 

lapply()files.petのすべてのエントリをループし、各エントリに対してfread()を実行し、データを含むリストを返します。freadは各ファイルの読み込みから作成しました。 rbindlist()は、すべての部分を1つの大きなdata.tableに結合するために使用されます。パラメータidcol = NDateは、NDateという名前のインデックス列を生成して、最終出力の各行の起点を識別します。 idsは、リストの長さの1から(リストに名前が付けられていない場合)整数値です。

最後に、ID番号はのファイル名を検索するために使用され、anytimeパッケージを使用して直接Dateクラスに変換されます。
EDIT多分、最初にそれらを見て前Dateにファイル名を変換する方が効率的かもしれません:

result[, NDate := anytime::anydate(files.pet)[NDate]] 

fread()はそれがかもしれないファイルを読み込むための正しいパラメータを分析し、推測ではかなりスマートですが、

関連する問題