使用'类计算出现次数'条件

时间:2015-07-23 06:54:03

标签: r class conditional-statements find-occurrences

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

以下是原始数据框:

10

以下是我想要获得的内容:

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

为此,我设法得到第4列(" SP"," Altmin"," Altmax"," Altmoy") 。但我并没有设法通过海拔等级来获得发生的次数。 (例如" nb_350.549"),以及每个海拔等级的代表性百分比,关于每个物种的发生次数(例如"%_ 350.549) - 事实上= nb.occ.SP(A)/ nb_350.549 * 100

这是我的剧本:

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

有什么想法吗?

谢谢!

R上。

1 个答案:

答案 0 :(得分: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