web-dev-qa-db-ja.com

Rのデータフレームから既存のExcelシートにデータを追加するにはどうすればよいですか?

Rで数十のデータフレームを作成しましたが、それらすべてをExcelファイルの1つのシートに追加したいと思います。

これが答えを見つけるために私が見た2つのページです(私は10の評判を持っていないので、私が訪れた4つのWebページのURLすべてを貼り付けることはできません):

Rパッケージxlsxを使用してExcelファイルにデータを書き込む 作成者は次のように述べています。「addDataFrame関数のstartRow引数とstartCol引数を使用して、シートの特定の開始位置にデータフレームを追加することもできます。」推奨されるコードは次のとおりです。

workbook.sheets workbook.test addDataFrame(x = sample.dataframe, sheet = workbook.test,
   row.names = FALSE, startColumn = 4) # write data to sheet starting on line 1, column 4
saveWorkbook(workbook.sheets, "test.excelfile.xlsx") # and of course you need to save it.

この提案に基づいて、これはRStudioでの私の試みでした。

addDataFrame(df_fl1, sheet = "AllData2.xlsx", startRow = 712)

これはRの出力でした:sheet $ getWorkbookのエラー:$演算子はアトミックベクトルには無効です

私もこのページを試しました:

Excelファイルの読み取りとRへのインポートに関するチュートリアル "ただし、既存のファイルにデータフレームを書き込みたい場合は、次のコマンドを実行できます。"

write.xlsx(df, 
           "<name and extension of your existing file>", 
           sheetName="Data Frame"
           append=TRUE)
write.xlsx(df_fl3, "AllData2.xlsx", sheetName="Salinity1", append=TRUE)

このコードを試してみたところ、すでにシートにあるデータが上書きされました。データフレームのデータをExcelシートに追加するにはどうすればよいですか?

6
Regulus

既存のExcelワークシートに追加するのは少し面倒です。代わりに、すべてのExcelデータファイルをRに読み込み、R内で結合してから、結合された単一のデータフレームを新しいExcelファイルに書き込みます(または、データをExcelに含める必要がない場合はcsvファイルに書き込みます)。ワークブック)。簡単な方法と難しい方法の両方については、以下のコードを参照してください。

簡単な方法:Rですべての作業を行い、最後に1つの結合されたデータフレームを保存します

たとえば、すべてのExcelデータファイルが現在の作業ディレクトリにあり、各Excelファイルの最初のワークシートにデータが含まれている場合、次の操作を実行できます。

library(xlsx)

# Get file names
file.names = list.files(pattern="xlsx$")

# Read them into a list
df.list = lapply(file.names, read.xlsx, sheetIndex=1, header=TRUE)

次に、それらを1つのデータフレームに結合し、ディスクに書き込みます。

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

write.xlsx(df, "combinedData.xlsx", sheetName="data", row.names=FALSE)

ハードウェイ:既存のExcelワークシートに連続するデータフレームを追加します

Excelに書き込むデータフレームのリストを作成します(上記で説明したように、実際のユースケースでは、データファイルをRのリストに読み込みます)。ここでは、説明のために組み込みのirisデータフレームを使用します。

df.list = split(iris, iris$Species)

各データフレームを単一のExcelワークシートに書き込むには、まず、Excelワークブックとデータを書き込むワークシートを作成します。

wb = createWorkbook()
sheet = createSheet(wb, "data")

# Add the first data frame
addDataFrame(df.list[[1]], sheet=sheet, row.names=FALSE, startRow=1)

次に、ループを使用して残りのすべてのデータフレームを追加します。次のデータフレームが正しい場所に書き込まれるように、毎回startRowをインクリメントします。

startRow = nrow(df.list[[1]]) + 2    

for (i in 2:length(df.list)) {

  addDataFrame(df.list[[i]], sheet=sheet, row.names=FALSE, col.names=FALSE, 
               startRow=startRow)

  startRow = startRow + nrow(df.list[[i]])

  }

ブックを保存します。

saveWorkbook(wb, "combinedData.xlsx")

addDataFrameは、Excelワークシートのさまざまな部分にさまざまなサマリーテーブルをレイアウトし、すべてをプレゼンテーションに適したものにしたい場合に便利です。ただし、生データを1つのデータファイルに結合するだけの場合は、Rですべての作業を実行し、結合したデータフレームを最後にExcelワークシート(またはcsvファイル)に書き込む方がはるかに簡単だと思います。

7
eipi10

あなたが言及した元のエラーを回避するには:

Sheet $ getWorkbookのエラー:$演算子はアトミックベクトルには無効です

あなたはこれを試すことができます:

wb <- loadWorkbook("<name and extension of your existing file>")
addDataFrame(df,getSheets(wb)$<sheetname>, startRow = 712)
saveWorkbook(wb, <filename>)
0