2013-02-13 50 views
0

我有一個數據框,顯示每個物種(列)在每個圖(線)處的樹數。使用apply函數並選擇行

我在列115種樹木和6264個地塊

頭(ESP)

  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)}) 

我想有與不同的曲線線條和存在柱物種比例的數據幀。

謝謝你的幫助。我想回來只是爲了一個愚蠢的問題:現在我有我的數據框與每個物種在每個地塊的比例,我想選擇所有的「純」地塊有超過80%的一個種類。

我知道如何選擇一個物種行:

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

這個工作,給了我我想要的東西,但我有115列我試圖用一個循環做:

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

但它沒有奏效。

我也嘗試過應用,但哪個()不是一個函數,所以它也沒有工作。

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

謝謝

回答

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(非數字)中的結果的元件顯然由於這樣的事實,一些情節具有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 
+0

這正是我在找的東西。我的想法很容易。再次感謝你朱巴 – Tom 2013-02-14 08:42:27

+0

我回來只是爲了一個愚蠢的問題:現在我有我的數據框與每個物種在每個地塊的比例,我螞蟻選擇所有的「純」地塊有超過80%的一個物種。 – Tom 2013-02-14 10:18:08

+0

@ user2068053也許你應該問另一個問題。 – juba 2013-02-14 10:20:04