Note of Pediatric Surgery

腸内細菌、R、ときどき小児外科

LIPID MAPSによる脂質の分類の階層テーブルを作成する

はじめに

脂溶性代謝物の解析をしており、いろいろと調べています。脂質の分類には古典的にはBloorの分類というものがあるようですが、この分類には当てはまらない物質も数多く存在するため、あまり厳密ではないようです。

ja.wikipedia.org

どうやら、最近ではLIPID MAPSという脂質の骨格に基づいた8分類が使われており、この論文でも使用されていました。

www.sciencedirect.com

どの脂質がどの分類に当てはまるかは、ざっと調べたところ、テーブルファイルにはなっていなくて、LIPD MAPSのウェブサイトにhtmlファイルとして掲載されているだけでした。いちいちクリックしないと階層が表示されないし、このままでは解析には到底使えないので、テーブルをファイルを作成してGitHubに共有しました。

間違いなどがあっても困るので、作成方法なども含めて記事にしておきます。

GitHub

github.com

こちらのレポジトリに置いてあるLIPIDMAPS.csvを使用していただければと思います。

テキスト情報の取得

まずLIPID MAPSのこのページにアクセスして、ブラウザでソースコードを開きます。 www.lipidmaps.org

<h2>Lipid Categories</h2>

から

<div class="mMain" style="font-size: 0.9em;">Other Polyketides <a href='/data/structure/LMSDSearch.php?Mode=ProcessClassSearch&LMID=LMPK00'>[PK00]</a></DIV>
</div>

の行までをコピペし、.htmlファイルに保存する。これを再度ブラウザで開き直すと、折りたたまれていた部分がすべて開いた状態で表示されるので、これをExcelにコピペします。恐らくXMLになっていないので、XML::readHTMLTable()なんかで取得する方法は使えないのではないかと思います。

asakat.hatenablog.com

Rでデータ整形

あとはこんな感じでデータを整形しています。

library(tidyverse)

read.csv("LIPIDMAPS_Raw.csv",
         header = FALSE) %>% 
  tbl_df %>% 
  dplyr::rename(Variable = V1) %>% 
  mutate(Variable = gsub(" ", " ", Variable)) %>% 
  separate(Variable, into = c("Variable", "ID"), sep = " \\[") %>% 
  mutate(ID = gsub("\\]", "", ID)) %>% 
  mutate(Number = str_sub(ID, start = 3),
         Class = str_sub(ID, start = 0, end = 2)) %>% 
  mutate(Category = if_else(nchar(Number) == 0, "Class",
                            if_else(nchar(Number) == 2,
                                    "Subclass", "Variable"))) %>%
  dplyr::select(-Number) -> LMSD_RAW_tbl

LMSD_RAW_tbl %>% 
  filter(Category == "Class") %>% 
  dplyr::rename(Class_abbr = Class,
                Class = Variable) %>% 
  dplyr::select(Class, Class_abbr) -> Class_tbw

LMSD_RAW_tbl %>% 
  filter(Category == "Subclass") %>% 
  dplyr::rename(Subclass = Variable,
                Class_abbr = Class) %>% 
  inner_join(., Class_tbw, by = "Class_abbr") %>% 
  dplyr::select(Class, Subclass, ID) -> Class_Subclass_tbw
  
LMSD_RAW_tbl %>% 
  filter(Category == "Variable") %>% 
  mutate(ID = str_sub(ID, end = 4)) %>% 
  dplyr::select(Variable, ID) %>% 
  inner_join(Class_Subclass_tbw, .) %>% 
  dplyr::select(-ID) -> LMSD_tbw

write.csv(LMSD_tbw, "LIPDMAPS.csv",
          row.names = FALSE)

以上です。