# 植生調査データの中から地点ごとの優占種(最上階層で最大被度のもの)を抽出する関数 select.dom.max <- function(df){ # 最上階層で最大被度のものを優占種とする df$layer <- ordered(df$layer, levels=c("k2","k1","s2","s1","b2","b1")) # 順位を与える st <- unique(df$stand) # 地点名 dom <- data.frame(stand="", d.sp="", d.layer="", d.n=0, d.cover=0) # 仮データ for(i in 1:length(st)){ # 地点数分繰り返し tmp.df <- subset(df, stand==st[i]) # 各地点の資料抽出 ly <- ordered(factor(tmp.df$layer), levels=c("k2","k1","s2","s1","b2","b1")) # 階層を順位付因子オブジェクトに設定 up.layer <- ly[order(ly)][max(order(ly))] # 最上階層 tmp.df <- subset(tmp.df, tmp.df$layer==up.layer) # 最上階層を抽出 cover.max <- max(tmp.df$cover) # 被度の最大値 tmp.df <- subset(tmp.df, cover==cover.max) # 被度の最大値を抽出 sp <- ""; for(j in 1:length(tmp.df$species)) sp <- paste(sp, sort(tmp.df$species[j])) # 種名を半角空白でつなぐ sp <- substr(sp,2,nchar(sp)) # 先頭の半角スペースを除去 add.dom <- data.frame(stand=st[i], d.sp=sp, d.layer=up.layer, d.n=nrow(tmp.df), d.cover=cover.max) # 地点,優占種,優占種階層,優占種数,優占種の被度 dom <- rbind(dom, add.dom) # 地点資料を追加 } dom[-1,] # 仮データの削除 } # 使用方法 sample.df <- data.frame( # サンプルデータ stand=c("st1","st1","st1","st1","st1","st1","st2","st2","st2","st2","st2","st2","st2","st3","st3","st3","st3","st3","st3","st3","st3","st3","st3","st3","st3"), cover=c(0.63,0.63,0.3,0.02,0.31,0.49,0.30,0.2,0.64,0.27,0.81,0.75,0.46,0.07,0.02,0.85,0.73,0.47,0.26,0.19,0.17,0.23,0.73,0.03,0.35), layer=c("b1","b1","s1","s2","k1","k1","b2","b2","b2","s1","s2","k1","k1","b2","s1","b1","k1","k1","b1","b2","b2","s1","s2","k1","b1"), species=c("アカマツ","コナラ","ヒサカキ","ソヨゴ","シュンラン","ススキ","アベマキ","ネジキ","ソヨゴ","コナラ","モチツツジ","トキワイカリソウ","マルバアオダモ","タムシバ","キンキマメザクラ","アカマツ","マンサク","ヒサカキ","ソヨゴ","マルバアオダモ","クロガネモチ","モチツツジ","コバノガマズミ","コバノミツバツツジ","コナラ") ) select.dom.max(sample.df) sample.df.2 <- read.table("http://kobe.cool.ne.jp/matsut/df0.txt", header=T) # データの呼び出し select.dom.max(sample.df.2)