2017-10-17 5 views
1

私はコーディングソフトウェアを使用するのに全く新しいです。私はRstudioの使用方法を学びたいと考えています。.csvファイル名からファイル番号をループして抽出し、列に挿入する

私はいくつかのファイルからデータを結合し、現在ファイルからファイル番号を抽出し、これらを列に挿入しようとしています。

fnames = dir("../data/temperature_trials", full.names=TRUE) 

print(fnames) 

for (i in 1: length(fnames)) { 

#open each file in turn 

temp = read.csv(fnames[i]) 

    if (i == 1) { 
    res = temp 
    } else { 
     res = rbind(res, temp) 
    } 
} 

``` 

は12個の.csvファイルをインポートし、指定されたすべてのdata.Files組み合わせるためにrbindを使用: Trial1.csv Trial2.csv を。 。 。 Trial12.csv私は、各.csvファイル名からトライアル番号を抽出し、TrialNumberという名前の列にそれらを配置しようとしています

``` 
    for (i in 1: length(fnames)) { 

loc = regexpr(pattern = "Trial[0-9]*", text = fnames[i]) 

trialNumber = as.numeric(substr(fnames[i], start = loc[[1]][1]+5, 
      stop = loc[[1]][1] + attr(loc, 'match.length')-1)) 
print(trialNumber) 

res1 = cbind(trialNumber, res) 

``` 

。私がそうするとき、それはすべてのデータポイントのためにこの列に12を置くだけです。ループを使用しているので、これが理由であると仮定していますが、これを修正する方法や別の方法で解決する方法がわかりません。試用番号を各.csvファイルに対応する各データポイントに割り当てる必要があります。

答えて

1

たぶん、あなたは、単にLOOP-

for (i in 1: length(fnames)) { 

#open each file in turn 

temp = read.csv(fnames[i]) 

    if (i == 1) { 
    res = temp 
    } else { 
     res = rbind(res, temp) 
    } 
res$trial_number=i 

} 

の各反復の間に、あなたが輸入されたファイルに対応しますトライアル番号列を持つことになります。この方法を試し番号を追加することができます。

この中で指摘したようにあなたはまた、ファイル名の数字の部分を抽出してみてくださいすることができますが、

Extract numeric part of strings of mixed numbers and characters in R

+0

12個のファイルが結合されているため、これは機能しません。私はトライアル番号の列を挿入する必要があり、適切な.csvファイルデータに対応する1-12でなければなりません。 – REV

+0

私が提案したのは、各繰り返しが終わる前にこれを行うということでしたが、すべてのファイルを既に一緒に追加した後に現在実行しようとしています。 –

1

をanswer-私は、ファイル名を使用して、CSVファイルからのデータフレームのリストを作成したいです

fnames <- list.files("full/path/to/data/temperature_trials", 
        pattern = "*.csv", full.names = TRUE) 
temp <- lapply(fnames, read.csv) 
names(temp) <- tools::file_path_sans_ext(basename(fnames)) 

その後dplyr::bind_rows().id列に治療ラベルでリストからデータフレームを作成します:各リスト要素名の基礎として

library(dplyr) 
temp_df <- bind_rows(temp, .id = "TrialNumber") 
関連する問題