2020年3月12日木曜日

地点ごとの外来種・在来種ごとの種数を算出

午前
・標本整理

午後
・授業準備

先日の続きで、新しいカテゴリーとして、外来種と在来種を加えて、地点ごとの外来種・在来種ごとの種数を算出する方法。

一発でやる方法は分からず、まどろっこしい方法でどうにかできた。

元データはこんな感じ。


まず、ここに外来種と在来種の情報を加える。

流れとしては、1)種名が書かれている「spe」をコピーして、新しい列「origin」として貼り付ける。そして、2)各種名ごとに外来種(exotic) or 在来種(native)に置換する。
#データが「data_exu」に入ってるとして
#install.packages("tidyverse", repos="http://cran.ism.ac.jp/")
library(tidyverse) #文字変換に必要
data_exu$origin <- data_exu$spe #「origin」を作成し、そこに「spe」の情報を入れる
data_exu$origin <- data_exu$origin 
    %>% str_replace_all(c("Agnara pannuosa"="native",
                             ・・・ "Armadillidium vulgare"="exotic",・・・)) #"置換前"="置換後"

次に、外来種・在来種ごと「origin」に、地点ごと「spe」に種数「n_spe」を算出する。これは先日の方法と同じ。
library(dplyr)
spe_site2 <- data_exu %>% group_by(origin, site)
    %>% summarize(n_spe = n_distinct(spe)) #siteごとに分けて,speのユニークな数.
spe_site2 <- data.frame(spe_site2)

で、現在の縦長のデータ(スタック形式)を横長の(アンスタック形式)にすると、欲しかったものが手にはいる。
library(tidyverse) #pivot_widerに必要
spe_site3 <- data.frame(spe_site2
    %>% pivot_wider(names_from = origin, values_from = n_spe))
上記は「origin」を列名にすると解釈すれば良い。

このように、地点「site」ごとに外来種(exotix)と在来種(native)の種数が算出されている。