2017-06-09 12 views
0

行列があります。データの例:行列の各行で複数の関数を実行し、結果を新しいデータフレームに追加します。

注:実際の行列では、行の名前はその行の値に関連付けるために重要なプロット番号です。

マトリックスの各行にさまざまな機能(ビーガンパッケージの多様性機能)を実行したいと考えています。機能には以下が含まれます。

library(vegan) 
div1<- diversity(matrix, index="shannon") 
div2<- diversity(matrix, index="simpson") 
div3<- exp(diversity(matrix,index="shannon")) 
div4<- 1/(1-diversity(matrix,index="simpson")) 
spec.num<- specnumber(matrix) 

出力はデータフレームでなければなりません。このデータフレームの各列は、ユニークな多様性指標を表します。

Rownames  div1  div2 div3 div4  spec.num 
    Plot1  2.995732 0.95 20  20   20 
    Plot34 2.995732 0.95 20  20   20 
    Plot56 2.995732 0.95 20  20   20 
    Plot60 2.995732 0.95 20  20   20 

注:出力は次のようになり、私の実際のデータのために行列の行は、各列の一意の値を持っている私の例が示すように、彼らが繰り返されることはありません。したがって、div3、div4、spec番号の出力は、必ずしもこの出力例に示す値と同じではありません。

答えて

0
library(vegan) 

matrix<- matrix(sample(1:10), nrow= 10,ncol=20) 
#rownames(matrix) <- paste0("plot", 1:nrow(matrix)) ## this is/was merely an illustration on carrying rownames forward 

df <- data.frame(div1=diversity(matrix, index="shannon"), div2=diversity(matrix, index="simpson"), 
     div3=exp(diversity(matrix,index="shannon")), div4=1/(1-diversity(matrix,index="simpson")), spec.nu=specnumber(matrix), row.names = rownames(matrix)) 
+0

あなたの行列がすでにrownamesを(これはrownamesの上に運ん説明した)を持っていれば 'rownames'コールは必要ありません。または、あなたの "rownames"が列1にある場合は、 'row.names = rownames(matrix)'を 'row.names = matrix [、1]'に変更してください。 – emilliman5

+0

今、私の質問は、ソリューションは非常にきれいで便利です。私が実行している唯一の問題(そして、 'rownames'関数を使って' 1:nrow(行列) 'に由来すると信じています)は、私のプロット数が1から100まで連続していないということです。元のデータフレームから削除しなければならなかったいくつかのプロットでは、マトリックスはプロット85からプロット88にスキップします。私のデータにあなたのコードを使用すると、プロットに順番に番号を付けてプロット番号を再割り当てするように見えます。したがって、プロット88は、プロット88のままにする必要があるとき、プロット86として番号が付け替えられます。 – Danielle

+0

私の編集を参照してください。あなたは 'rownames(matrix)< - paste0(" plot "、1:nrow(matrix))'を必要としないので、コメントアウトしました。 – emilliman5

0

あなたは結果を列バインドするだけですか?

# if you set your sampling range to be 1:1000 these diversity values are no longer constant 
mtx <- matrix(sample(1:1000), nrow= 10,ncol=20) # I like to avoid like names 
#install.packages("vegan") 
library(vegan) 
div1<- diversity(mtx, index="shannon") 
div2<- diversity(mtx, index="simpson") 
div3<- exp(diversity(mtx,index="shannon")) 
div4<- 1/(1-diversity(mtx,index="simpson")) 
spec.num<- specnumber(mtx) 
cbind(div1, div2, div3, div4, spec.num) # cbinding equal length vectors into a data.frame/matrix 
#cbind.data.frame() 
関連する問題