# 植生調査データの中から地点ごとの優占種を抽出する関数 select.dom <- function(df, threth=0.24){ # threth以上の被度を持つものを優占種とする 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) # 仮データ 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, layer==up.layer & cover>threth) # 最上階層かつ閾値超の被度 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)) # 地点,優占種,優占種階層,優占種数 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.33,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(sample.df) select.dom(sample.df,0.5) sample.df.2 <- read.table("http://kobe.cool.ne.jp/matsut/df0.txt", header=T) # データの呼び出し select.dom(sample.df.2) select.dom(sample.df.2,0.5)