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

Count number of occurrence with a 'class' condition

我正在尝试计算 'class' 海拔中物种出现的次数(沿海拔梯度分布)。

这是原始数据框:

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")。但是我没有设法得到'class of altitude'(例如"nb_350.549")的出现次数,也没有得到每个海拔高度的代表性百分比class,关于每个海拔高度的出现次数物种(例如“%_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.

这是一个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