見出し画像

手軽にRでEXCELファイルの全シートを読み込み分析する方法

openxlsx:RでExcel(.xlsx)ファイルを入力するのに便利なパッケージ

デポジットされたデータをRで手軽に分析したくなって色々と試してみたところopenxlsxが非常に便利でした。

今までtxtファイルかcsvファイルにセーブし直して作業していたのですが、非常に手軽なためその作業が要らなくなります!

まずはパッケージのインストールと読み込み

install.packages('openxlsx')
library(openxlsx)

次に基本は

x<- read.xlsx(path_to_file,
               sheet = "XXX", #読み込むシート名もしくはシート番号でシートを指定
               rowNames = TRUE, #一行目を行名として扱う
               colNames =TRUE, #一列目を列名として扱う
               detectDates = TRUE) #日時を認識する

今回は

のサイトのDE gene listからダウンロードできるMouse_GBM_mg-TAM.xlsxとファイルを使ってみましょう。

このエクセルファイルは全部で、数千から数万X15列の行列が19枚のシートに分かれて入っている(シート1はまとめのシート)膨大なデータが含まれたシートです。

一番最後のシート"Mg-TAM vs Mo-TAM"を読み込んでみましょう。

x <- read.xlsx("Mouse_GBM_TAM.xlsx" , colNames = TRUE,sheet = "Mg-TAM vs Mo-TAM")

そして確認すると

head(x)

画像1

そのデータが垣間みえると思います。これはMg-TAMとMo -TAMと言う二つの細胞間で発現変化のある遺伝子のリストの情報を上げたもので、一列目に遺伝子名(gene)、2列目がその概要、3列目がp値、4列目が発現比、7列目がFDR値が入っているようで、うまく読み込めていることがわかります。

エクセルファイルのシートを丸ごと読むには?

次にこれだけだと面白くないので、Mouse_GBM_mg-TAM.xlsxの全シートから情報をとってきてみましょう。

どれだけどう言う名前のシートがあるかは

st <- getSheetNames("Mouse_GBM_TAM.xlsx" )

st

でわかります。

画像3

一番最初がサマリーであることはわかっているのでそれをのぞいて、全てのシートの一番最初の遺伝子名をとってきてみましょうか?

for (i in st[2:length(st)]) {
 x <- read.xlsx("Mouse_GBM_TAM.xlsx" , colNames = TRUE,sheet = i)
 print(c(i,x3$gene[1]))# 2番目のシートから最後のシートまで読み込んで、シートの名前と一番上の遺伝子名を表示
}

すると

画像4

とうまく表示されていることがわかります。

遺伝子解析への応用

最後にこのエクセルファイルは2つの異なる細胞間で発現変化のある遺伝子群をそれぞれの比較のペアごとにシートごとにまとめたものでした。

元々やりたかったことはこのシート丸ごと一瞬で解析してシートごとのボルケーノプロットを出すこと!

うまくいったので挑戦してみました!

library(calibrate)
volca2 <- function (x,y){
 with(x, plot(avg_logFC, -log10(p_val_adj), pch=20, main=y,cex = .6))
 with(subset(x, abs(avg_logFC)>1 & p_val_adj <1e-5), points(avg_logFC, -log10(p_val_adj), pch=20, col="red",cex = .6))
 #with(subset(x, abs(avg_logFC)>1 & p_val_adj <1e-10), textxy(avg_logFC, -log10(p_val_adj), labs=gene, cex=.4))
}
dev.off()
par(mfrow=c(4,5))
for (i in st2) {
 x <- read.xlsx("Mouse_GBM_TAM.xlsx" , colNames = TRUE,sheet = i)
 volca2(x,i)
}

とコードして

画像2

結果は綺麗に出ていました!

なかなかエクセルファイルの全てのシートを丸ごと抽出する方法が検索しても載っていなかったのですが、getSheetNames() とfor文うまく行きましたので記載しておきます。

参考サイト





この記事が気に入ったらサポートをしてみませんか?