首页 文章

计算'class'条件的出现次数

提问于
浏览
0

我试图计算物种的出现次数(沿着海拔梯度分布)在“等级”的海拔高度 .

这是原始数据框:

tab
    R sp N Hauteur Alt Plot Quadrat Microhab Cover
1  R2  B 1  0-50cm 350   P1      Q1       TA    50
2  R2  D 1  0-50cm 350   P1      Q1       TA    50
3  R3  A 2  0-50cm 550   P1      Q1       TA    95
4  R3  C 1  0-50cm 550   P1      Q1       TA    95
5  R3  B 3  0-50cm 550   P1      Q1       TA    95
6  R3  D 4  0-50cm 550   P1      Q1       TA    95
7  R4  C 3  0.5-1m 350   P1      Q1       TB    50
8  R4  A 4  0.5-1m 350   P1      Q1       TB    50
9  R4  E 2  0.5-1m 350   P1      Q1       TB    50
10 R4  D 3  0.5-1m 350   P1      Q1       TB    50
11 R4  B 4  0.5-1m 350   P1      Q1       TB    50

这是我想要获得的:

head(parametres)
SP        Altmin  Altmax   Altmoy  nb_350.549 nb_550.749 [...]   %_350.549m
A          350     550      450        1          0       ...         50
B          350     550      416.67     2          1       ...         33.3
C          350     550      450        1          0       ...         50

为此,我设法获得了第4列(“SP”,“Altmin”,“Altmax”,“Altmoy”) . 但是我没有设法得到“海拔等级”(例如“nb_350.549”)的发生次数,也没有设法得出每个海拔等级的代表性百分比,关于每个物种的发生次数(例如“ %_350.549) - 实际上是= nb.occ.SP(A)/ nb_350.549 * 100

这是我的脚本:

parametres<-ddply(tab,.(sp),function(esp){
+     summarise(esp,
+               Altmin=min(Alt),
+               Altmax=max(Alt),
+               Altmoy=mean(Alt),
+   )})

任何的想法?

谢谢!

R.

1 回答

  • 1

    这是一个 dplyr 解决方案

    tab <- read.table(text="R sp N Hauteur Alt Plot Quadrat Microhab Cover
    R2  B 1  0-50cm 350   P1      Q1       TA    50
    R2  D 1  0-50cm 350   P1      Q1       TA    50
    R3  A 2  0-50cm 550   P1      Q1       TA    95
    R3  C 1  0-50cm 550   P1      Q1       TA    95
    R3  B 3  0-50cm 550   P1      Q1       TA    95
    R3  D 4  0-50cm 550   P1      Q1       TA    95
    R4  C 3  0.5-1m 350   P1      Q1       TB    50
    R4  A 4  0.5-1m 350   P1      Q1       TB    50
    R4  E 2  0.5-1m 350   P1      Q1       TB    50
    R4  D 3  0.5-1m 350   P1      Q1       TB    50
    R4  B 4  0.5-1m 350   P1      Q1       TB    50",head=TRUE)
    
    library(dplyr)
    
    tab %>% group_by(sp) %>%
      summarize(n=n(),
                Altmin=min(Alt),
                Altmax=max(Alt),
                Altmoy=mean(Alt),
                nb_350.549=sum(ifelse(Alt >= 350 & Alt < 550,1,0)),
                nb_550.749=sum(ifelse(Alt >= 550 & Alt < 749,1,0))) %>%
      mutate(f_350.549=nb_350.549/n*100,
             f_550.749=nb_550.749/n*100)
    
    Source: local data frame [5 x 9]
    
      sp n Altmin Altmax   Altmoy nb_350.549 nb_550.749 f_350.549 f_550.749
    1  A 2    350    550 450.0000          1          1  50.00000  50.00000
    2  B 3    350    550 416.6667          2          1  66.66667  33.33333
    3  C 2    350    550 450.0000          1          1  50.00000  50.00000
    4  D 3    350    550 416.6667          2          1  66.66667  33.33333
    5  E 1    350    350 350.0000          1          0 100.00000   0.00000
    

相关问题