2016-12-07 3 views
1

年(1999:2014)と小領域(1:4)で種が相対的に豊富な表があります。私はFDパッケージを使用して関数dbFD(x,a)を使って関数多様性を計算しています。ここで 'x'は特性*種行列、 'a'は地域種*存在量行列です。ヘッダー名を失わないように行列を再フォーマットするにはどうすればいいですか?

relativeabunは、22260 obsのテーブルです。 'a'のためには、ncol = 1、2、3、4、5、6、8、9、10、10、10、10、それがないのでSpecies_CDと私の56枚のコミュニティのためのnrow = 56(各部分領域について、毎年、例えば、1999subregion 1、1999subregion 2、など)のための371

relativeabun <- read.csv("~/Dropbox/Thesis/Functional_Diversity/Results with four Subregions/relativeabun_year_sub.csv", header = TRUE) 

for (whatarea in 1:4){ #subregions upper, middle, lower, DT 
    for (whatyear in 1999:2014){ 

thisdata1 = relativeabun[relativeabun$Year == whatyear,] 
thisdata2 = thisdata1[thisdata1$Subregion == whatarea,] 
thisdata3 = thisdata2$Relative.Abundance 
relabun = t(thisdata3) #transpose data so 371 columns 

functionaldiversity <- dbFD(spectrait_matrix,relabun) 
    } 
} 

私の 'A'(relabun行列)が間違っています種名を含める... [1、]の56のコミュニティの各種の相対的な豊富な371列のマトリックスでなければならない

どこが間違っていますか?

答えて

0

"reshape2"パッケージを試すことができます。どのような動作しているようですと、列の

library(reshape2) 
    set.seed(123) 
    relativeabun <- data.frame(year=rep(2010:2015,10), Subregion=rep(c("Asia", "Africa"), 30), Species_CD=rep(c("A", "B", "C", "D", "E")), Abundance=runif(60), RelAbundance=runif(60)) 

これは

year Subregion Species_CD Abundance RelAbundance 
    2010  Asia   A 0.2655087 0.9128759 
    2011 Africa   B 0.3721239 0.2936034 
    2012  Asia   C 0.5728534 0.4590657 
    2013 Africa   D 0.9082078 0.3323947 
    2014  Asia   E 0.2016819 0.6508705 
    2015 Africa   A 0.8983897 0.2580168 

ような何か次に、あなたは、このデータフレームを溶融し、種とそれをバックキャストする必要が生じ

tmp <- melt(relativeabun, id.vars=c("year", "Subregion", "Species_CD"), value.name="Value") 
    relabun <- dcast(data=tmp, ...~Species_CD, fun.aggregate=sum, value.var="Value") 
    relabun <- relabun[relabun$variable=="RelAbundance", -c(3)] 

です最後の行は、Abundanceデータとmelt変数を取り除くためのものです。

関連する問題