2016-09-22 3 views
3

私はRやプログラミング全般に新しく、〜2000に含まれるデータを整理するのに役立つ.xlsファイルと.xlsxファイル。各ファイルは、ヘッダーの前に34〜40行の「迷惑メール」テキストの範囲で始まります。ヘッダーの下のすべてのデータは同じ次元を持ちます。Rパッケージを使用するヘッダーの前に複数の.xlsxファイルを列方向に整理する問題:readxlとcsvへの書き込み

第1の方法では、リストにデータを追加しようとしました。縦型フォーマットは有用ではなかった。

library(readxl) 
file.list <- list.files(pattern='*.xls') 
dm.list <- lapply(file.list, read_excel) 

私は現在、一度に一つのファイルを読み込む「ジャンク」のテキストを削除して、.csvファイル(追記データ列方向)に書き込もうとしています。

library(readxl) 
file.list <- list.files(pattern='*.xls') 

for(i in 1:dim.data.frame(file.list)) 

store.matrix <- read_excel((paste0("C:\\Users\\jlmine\\Desktop\\qPCRextData\\", file.list[i])), sheet = "Results") 

while (store.matrix[1,1] != "Well") #search for header 
{ store.matrix <- store.matrix[-c(1)] } #delete non-header rows 

write.csv(store.matrix, file = "qPCRdataanalysis.csv", append = TRUE) 

次の行がエラーを投げている:

store.matrix <- read_excel((paste0("C:\\Users\\jlmine\\Desktop\\qPCRextData\\", file.list[i])), sheet = "Results") 

Error: 'C:\Users\jlmine\Desktop\qPCRextData\' does not exist. In addition: Warning message: In 1:dim.data.frame(file.list) :
numerical expression has 2 elements: only the first used

"C:\ Users \ユーザーjlmine \デスクトップ\ qPCRextData \" は私の作業ディレクトリとして設定された 任意のアイデアを大幅でしょう感謝。

+0

すでにopenxlsxパッケージを試しましたか?あなたのような問題に対して多くのソリューションを提供しています – Ferdi

+0

私はまだそのパッケージを調べていません...私は、以下の解決策/提案に問題がある場合、私はそれをチェックします...推薦のおかげで! –

答えて

0

.xlsxファイルにアクセスできない場合、問題はforループステートメントにあるようです。 list.filesは、指定されたディレクトリにあるファイルの文字ベクトルを返します。長さ5でベクトルxにdim.data.frameを使用すると、あなたに結果を与えるだろう:

#[0, 5] 

そして、あなたの警告メッセージから

、あなたが最初の要素だけがループのために使用されている知っています。だからあなたは何かをループしていません。あなたがよりエレガントに、すべてのファイルをループにしたいのであれば、あなたがしたい

...

for (i in seq(length(file.list)) { 
0

私はあなたのデータの一部を見ることなく確認することはできませんが、あなたはできるようにそれが見えます各ファイルを読み込み、「実際の」データが始まる行を見つけて、「迷惑行」行を削除します。たとえば:

df.list = lapply(file.list, function(f) { 

    # Read file 
    tmp = read_excel(f, sheet="Results") 

    # Find highest index of row containing "Well" and add 1 (assuming here 
    # that a row containing "Well" will come before the header row). 
    s = which(apply(tmp, 1, function(x) {grep("Well", x)}) > 0) 
    s = ifelse(length(s) > 0, max(s) + 1, 0) 

    # Reset column names to the values in row s (the actual header row) 
    # Remove rows 1 through s (the "junk" text plus the header row) from the data frame 
    if(s > 0) { 
    names(tmp) = tmp[s, ] 
    tmp[-(1:s), ] 
    } 

}) 

あなたは今df.list、各要素はあなただけのロードXLS/XLSXファイルの一つであるリストを持っています。データを列単位で結合したいとしますが、各データフレームに同じ列がある場合は、データフレームを積み重ねません。これを行うには、あなたが行うことができます:あなたは今、あなたはCSVファイルとして保存することができ、単一のデータフレームを、持っている

df.list = do.call(rbind, df.list) 

関連する問題