如何计算两个极值之间的值的数量?

时间:2015-11-11 21:41:27

标签: r

我有一个数据集,我需要计算重新捕获概率。我想如果我在捕获1的两个事件之间求和0(物种不重新捕获)的值并将该值除以潜在捕获的数量(所有事件1加上1之间的所有事件,所以0)会给我一个重新夺回的概率。

E.g。如果我有1 1 0 1这将是1/4 = .25所以我有25%的机会没有重新夺回一个物种。在另一种情况下,如果我有1 0 0 1,我会有2/4这样有50%的机会重获这个物种。最后,如果我有1 1 1 0,这将是0/3,因此0%的物种没有被重新捕获。

有没有办法在此数据集中自动执行此操作?

structure(list(y.2010 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), y.2011 = c(1, 
1, 1, 0, 1, 1, 1, 0, 0, 1, 1), y.2012 = c(0, 0, 0, 1, 0, 0, 1, 
0, 0, 0, 1), y.2013 = c(0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0), y.2014 = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0), BANDFINAL = c("JP179", "JP197", 
"JP209", "JP2340", "JP3118", "JP3120", "JP3162", "JP3164", "JP3165", 
"JP3170", "JP3171")), .Names = c("y.2010", "y.2011", "y.2012", 
"y.2013", "y.2014", "BANDFINAL"), row.names = c(103L, 113L, 120L, 
125L, 140L, 142L, 151L, 153L, 154L, 156L, 157L), class = "data.frame")

打印出来:

    y.2010 y.2011 y.2012 y.2013 y.2014 BANDFINAL
103      1      1      0      0      0     JP179
113      1      1      0      0      0     JP197
120      1      1      0      0      0     JP209
125      1      0      1      0      0    JP2340
140      1      1      0      0      0    JP3118
142      1      1      0      0      0    JP3120
151      1      1      1      1      0    JP3162
153      1      0      0      1      0    JP3164
154      1      0      0      1      0    JP3165
156      1      1      0      0      0    JP3170
157      1      1      1      0      0    JP3171

最后,它假设这样做:

0
0
0
1/3
0
0
0
2/4
2/4
0
0

谢谢,

2 个答案:

答案 0 :(得分:5)

我的猜测@Ben是对的,但我对这种识字并不熟悉,这个问题看起来很有趣,所以我的foo尝试使用vectorized {{base 1}}和max.col函数用于计算概率

rowSums

答案 1 :(得分:2)

您可以使用dplyr

首先我们将gather数据转换成长格式。然后我们group_by乐队。然后我们summarise第一个和最后一个捕获,以及概率,它是第一个和最后一个之间的0的数量:

library(dplyr)
library(tidyr)
dat %>% gather(year, val, -BANDFINAL) %>%
        group_by(BANDFINAL) %>%
        summarise(first = min(which(val == 1)),
                  last = max(which(val == 1)),
                  prob = sum(val[first:last]==0)/(last - first +1))
Source: local data frame [11 x 4]

   BANDFINAL first  last      prob
       (chr) (int) (int)     (dbl)
1      JP179     1     2 0.0000000
2      JP197     1     2 0.0000000
3      JP209     1     2 0.0000000
4     JP2340     1     3 0.3333333
5     JP3118     1     2 0.0000000
6     JP3120     1     2 0.0000000
7     JP3162     1     4 0.0000000
8     JP3164     1     4 0.5000000
9     JP3165     1     4 0.5000000
10    JP3170     1     2 0.0000000
11    JP3171     1     3 0.0000000