2020年3月30日月曜日

anti_join( )

午前
・標本整理

午後
・データ解析
・論文書き(ワラジムシ群集)

種の分布解析でロジスティック解析をする際、対象種が確認された在データだけでなく、調べたが対象種が確認できなかった不在データも必要となる。

私の場合、採集日や場所を紐付けした動物標本のデータと、別に、調査を行なった地点のデータを記録している。

したがって、ロジスティック解析をするには、不在データを準備して、標本データに結合する必要がある。

これまで手作業でやっていたのだが、「dplyr」パッケージの「anti_join( )」を使うことでどうにかできた。流れとしては、調査地点データから「標本データに含まれている地点の行を削除」したのち、これら2つのデータを結合した。

標本データ。「species.csv」として記録されているとする。


地点データ。「plot.csv」として記録されているとする。


データの取り込みと、2つのデータの列が異なるので揃える。
spe <- read.csv("species.csv", header=T)
plot <- read.csv("plot.csv", header=T)
#種データの「spe」列を作成し「NONE」と記入する
plot$spe <- rep("NONE", nrow(plot))
plot <- plot[, c(3,1,2,4)] #列の順番を「spe」データと揃える
標本データ「spe」に含まれる地点 (site列) を全調査地点データ「plot」の地点 (site列) と比較し、同じ地点名がある場合は「plot」からその地点名がある行を削除する。削除した後の「plot」のデータは「absent」に格納する。
#install.packages("dplyr", repos="http://cran.ism.ac.jp/")
library(dplyr)
absent <- anti_join(plot, spe, by = "site")
「spe」と「absent」を結合する。
library(dplyr)
pre_ab <- bind_rows(spe, absent)
「sort( )」しているが、下記のように「Burmoniscus ocellatus」がいた地点と、本種が確認されなかった地点「NONE」が混じったデータが出来上がった。


「spe」において、1地点で複数のサンプルが記録されており、1個体/1種/1地点、する場合は、「dplyr::distinct( )」や「duplicated( )」で削除できるはずだが、複数の列を対象とする場合は試したことがないので、良く分からない。