0

各種 (列) の各プロット (行) での木の数を示すデータ フレームがあります。

列に 115 種の木があり、6264 のプロットがあります

頭(特に)

         02 03 04 05 06 07 08S 09 10 11 12P 12V 13B 13C 13G 14 15P 15S 16 17C
  600005  0  0  0  0  0  0   0  0 16  0   0   0   0   0   0  0   0  32  0   0
  600008  0  0  0  0  0  0   0  0  0  0   0   8   0   0   0  0   0   0  0   5
  600012  0  0  0  0  0  0   0  0  0  0   0   0   0   0   0  0   0   0  0   0
  600030  3  0  0  5  0  0   0  0  0  0   0   0   0   0   0  0   0   0  0   0
  600033  0  0  0  0  0  0   0  0  0  0   0   0   0   0   0  0   0   0  0   0
  600035  0  0  0  1  0  0   0  0  0  0   0   0   0   0   0  0   0   0  0   0

各プロットに存在する各種の割合を計算しようとしています。私はこれをやろうとしました:

apply(esp,c(1,2), function(x){ifelse(x>0, x/sum(x)*100,0)})

私が欲しいのは、さまざまなプロットを線として、存在する種の割合を列として持つデータ フレームです。

ご協力ありがとうございました。

ばかげた質問のために戻ってきました。各プロットでの各種の割合を含むデータ フレームを取得したので、1 つの種が 80% を超えるすべての「純粋な」プロットを選択したいと考えています。

1 つの種の行を選択する方法を知っています。

pur<-prop[which(prop[,1]>80),]

これは機能し、私が望んでいたものを与えてくれましたが、115列あるので、ループで試してみました:

for (i in 1:115){
prop[which(prop[,i]>80),]
}

しかし、うまくいきませんでした。

私も適用してみましたが、 which() は関数ではないため、どちらも機能しませんでした。

apply(prop,2,which(prop[,1]>80))

ありがとうございました

4

1 に答える 1

0

これはあなたが探しているものですか?

esp/rowSums(esp)

         X02 X03 X04   X05 X06 X07 X08S X09       X10 X11 X12P      X12V
600005 0.000   0   0 0.000   0   0    0   0 0.3333333   0    0 0.0000000
600008 0.000   0   0 0.000   0   0    0   0 0.0000000   0    0 0.6153846
600012   NaN NaN NaN   NaN NaN NaN  NaN NaN       NaN NaN  NaN       NaN
600030 0.375   0   0 0.625   0   0    0   0 0.0000000   0    0 0.0000000
600033   NaN NaN NaN   NaN NaN NaN  NaN NaN       NaN NaN  NaN       NaN
600035 0.000   0   0 1.000   0   0    0   0 0.0000000   0    0 0.0000000
       X13B X13C X13G X14 X15P      X15S X16      X17C
600005    0    0    0   0    0 0.6666667   0 0.0000000
600008    0    0    0   0    0 0.0000000   0 0.3846154
600012  NaN  NaN  NaN NaN  NaN       NaN NaN       NaN
600030    0    0    0   0    0 0.0000000   0 0.0000000
600033  NaN  NaN  NaN NaN  NaN       NaN NaN       NaN
600035    0    0    0   0    0 0.0000000   0 0.0000000

結果のNaN(Not A Number) 要素は明らかに、一部のプロットでは種の総数が 0 であり、ゼロによる除算につながるという事実によるものです。必要に応じて、これらの値を別のものに置き換えることができます。たとえば、次のようにします。

res <- esp/rowSums(esp)
res <- sapply(res, function(v) {
  v[is.nan(v)] <- 0
  return(v)
})
round(res,2)

       X02 X03 X04  X05 X06 X07 X08S X09  X10 X11 X12P X12V X13B X13C X13G
[1,] 0.00   0   0 0.00   0   0    0   0 0.33   0    0 0.00    0    0    0
[2,] 0.00   0   0 0.00   0   0    0   0 0.00   0    0 0.62    0    0    0
[3,] 0.00   0   0 0.00   0   0    0   0 0.00   0    0 0.00    0    0    0
[4,] 0.38   0   0 0.62   0   0    0   0 0.00   0    0 0.00    0    0    0
[5,] 0.00   0   0 0.00   0   0    0   0 0.00   0    0 0.00    0    0    0
[6,] 0.00   0   0 1.00   0   0    0   0 0.00   0    0 0.00    0    0    0
     X14 X15P X15S X16 X17C
[1,]   0    0 0.67   0 0.00
[2,]   0    0 0.00   0 0.38
[3,]   0    0 0.00   0 0.00
[4,]   0    0 0.00   0 0.00
[5,]   0    0 0.00   0 0.00
[6,]   0    0 0.00   0 0.00
于 2013-02-13T11:14:49.533 に答える