# 特定の種・階層・被度を持つデータを抽出する関数 select.veg <- function(df, species=NULL, layer=NULL, min.cover=0){ df.0 <- df # 元の df if(!is.null(species)){ # 種名の入力があれば df <- merge(df, data.frame(species=species)) # 種名で選択 } if(!is.null(layer)){ # 階層の入力があれば df <- merge(df, data.frame(layer=layer)) # 階層で選択 } stand <- subset(df, cover>=min.cover, select=stand) # 被度で地点を選択 df.0 <- subset(merge(df.0, stand)) # 元の df と結合して rm.level(df.0) # 成分中の不要な要素を除去 } # 使用方法 library(vegan) # ライブラリの呼び出し 別途インストールが必要 data(dune) # データの呼び出し df <- as.data.frame.table(as.matrix(dune)) # dfに変換 df <- subset(df, Freq>0) # 頻度が0のものを除去 colnames(df) <- c("stand","species","cover") # df$layer <- sample(c("b1","s1","k1"), 197, T) # 階層を与えてやる select.veg(df, species="Lolper", layer="b1", min.cover=5)