・標本整理
午後
・論文書き(卒論論文化: マダニ)
昨日、悩んだ地点あたりの種数算出は、家に帰って考えたらアッサリ解決した。
データはこんな感じで、1行1個体で「site」列に地点、「spe」列に種名が書かれている。
例えば、地点ごとの個体数を算出するには下記でOK!
#データが「data_exu」に入ってるとして tapply(data_exu$spe, data_exu$site, length)場所ごとの種ごとの個体数ならば
tapply(data_exu$spe, list(data_exu$site, data_exu$spe), length)で良い。
これは「site」ごとに分割して、「length」でその分割された行の数を数えていると考えると良い。
で、この方法を応用して、「site」ごとに分割して「nlevels」で分割されたデータの「spe」に含まれるFactor(種名)の数を数えれば良いと考えたのが昨日。
tapply(data_exu$spe, data_exu$site, nlevels)なぜか、全て16になってしまう。16はデータに含まれる種数。
「factor()」とか試したけどダメ!
で、たどり着いたのが、「library(dplyr)」の「group_by」+「n_distinct」。
「group_by」は文字通りグループに分ける。で、「n_distinct」は「ユニーク数を数える(重複を除去して数える)」という機能。正にコレが欲しかった!
library(dplyr) a <- data_exu %>% group_by(site) %>% summarize(n_spe = n_distinct(spe)) aで良い、、、と思う。「group_by(site)」で「site」ごとに分けて、「spe」に含まれるユニーク数(種数)を数えて「n_spe」に返してくれる。
さらに、元データに外来種と在来種の情報を加えて、地点ごとの外来種と在来種の種数を調べたのが、これはさらに少し手を加える必要があった。