シート1、シート2、シート3の3つのExcelファイルがあります。 各シートにはxとyの列があります。 私は、各個別シート、および「プロット+ライン」を読んでたんでした何複数のExcelシートを繰り返して1つのグラフにプロットするread.xlsx
以下のような1区に3つのプロットのx-yのを載せていきたいと思います。
これを行うループ方法はありますか?私は3枚以上のシートを持っているので。
シート1、シート2、シート3の3つのExcelファイルがあります。 各シートにはxとyの列があります。 私は、各個別シート、および「プロット+ライン」を読んでたんでした何複数のExcelシートを繰り返して1つのグラフにプロットするread.xlsx
以下のような1区に3つのプロットのx-yのを載せていきたいと思います。
これを行うループ方法はありますか?私は3枚以上のシートを持っているので。
ここでは、各シートをデータフレームのリストに読み込み、ソースシートの識別子を含む単一のデータフレームにスタックし、ggplot2を使用してプロットすることをお勧めします。
私が作成したtest.xlsx
という単純なExcelファイルの例です。下の図に示すように、3つのシートがあり、それぞれに4行のデータがあります。このコードでは、Excelファイルが現在の作業ディレクトリにあることを前提としています。そうでない場合は、データを読み込むときにファイルへの適切なパスを指定します。私はreadxl
パッケージを使ってデータを読みました。このメソッドは、同じ列名を持つ任意の数のシートをExcelワークブックに一般化します(別のシートの異なる列名を処理するために追加の処理を行うこともできます)。
library(readxl)
library(dplyr)
library(ggplot2)
# Get sheet names
sht = excel_sheets("test.xlsx")
sht
[1] "Sheet 3" "Sheet 2" "Sheet1"
# Read each sheet into a list
df = lapply(setNames(sht, sht), function(s) read_excel("test.xlsx", sheet=s))
df
$`Sheet 3` x y 1 1 10 2 2 11 3 3 12 4 4 13 $`Sheet 2` x y 1 1 5 2 2 6 3 3 7 4 4 8 $Sheet1 x y 1 1 1 2 2 2 3 3 3 4 4 4
# Convert to a single data frame with a column for the source sheet
df = bind_rows(df, .id="Sheet")
# Plot
ggplot(df, aes(x,y,colour=Sheet)) +
geom_line() +
scale_y_continuous(limits=c(0,max(df$y))) +
theme_classic()
もう一つの方法は、を使用することができには、getSheets
という名前の機能があり、ブック内の名前と枚数を確認できます。私はシートの名前を読んで、それを使ってすべてのシートのデータのリストを作成しています。これらのデータをggplotで後で使用するために長い形式に結合します。例えば
library(xlsx)
setwd("/Users/pradeepkumar/Desktop/Misc") ###set your working directory where your data resides
sheetname <- getSheets(loadWorkbook("Workbook1.xlsx"))
s1 <- lapply(names(sheetname),function(x)read.xlsx("Workbook1.xlsx",sheetName = x))
names(s1) <- names(sheetname)
final_data <- data.frame(do.call("rbind",s1))
sheets <- rownames(final_data)
sheets <- gsub("\\.\\d{1,}","",sheets)
final_data$sheets <- sheets
rownames(final_data) <- NULL
library(ggplot2)
ggplot(data=final_data,aes(x=x,y=y,color=sheets)) + geom_line()
私は変数としてxとyとのそれらのそれぞれの3つの異なるデータセットを持っている3枚(1、2及び3)
とワークブック(Workbook1.xlsx)を有します。上のコードを使って私は以下のようなプロットを得ることができます。
ありがとうございました! – futong
@futongこんにちはようこそ、あなたは少し新しく、解決策を投稿した最初の人だったので、誤解を招いて私の解決策に「私はあなたにeipi10解決策を受け入れるよう依頼する」という誤解を受けたかもしれません。私はあなたの低い点のために私の答えにupvoteできないことを理解しますが、感謝は私のために十分です。 epi10とマークされた解を変更してください。それは素晴らしいコミュニティです。ありがとう – PKumar
実際には、@ futongが最初に起こった答えではなく、彼にとって最良の答えを選択する方が良いと思います。彼のワークフローで 'xlsx'を使うのが良いなら、彼はあなたの答えを選ぶべきです。 – eipi10
パーフェクト!たくさんありがとう! – futong