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

标签 r

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

例如如果我有 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

谢谢,

最佳答案

我猜 @Ben 是对的,但我不熟悉这种知识,而且这个问题看起来很有趣,所以这是我的 base 尝试使用矢量化 max。 colrowSums 函数以计算概率

indx <- max.col(df[-ncol(df)], ties.method = "last")
df$Prob <- (indx - rowSums(df[-ncol(df)])) / indx
df
#     y.2010 y.2011 y.2012 y.2013 y.2014 BANDFINAL      Prob
# 103      1      1      0      0      0     JP179 0.0000000
# 113      1      1      0      0      0     JP197 0.0000000
# 120      1      1      0      0      0     JP209 0.0000000
# 125      1      0      1      0      0    JP2340 0.3333333
# 140      1      1      0      0      0    JP3118 0.0000000
# 142      1      1      0      0      0    JP3120 0.0000000
# 151      1      1      1      1      0    JP3162 0.0000000
# 153      1      0      0      1      0    JP3164 0.5000000
# 154      1      0      0      1      0    JP3165 0.5000000
# 156      1      1      0      0      0    JP3170 0.0000000
# 157      1      1      1      0      0    JP3171 0.0000000

关于r - 如何计算两个极值之间的值个数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33660368/

相关文章:

r - 简化 R 上的仿真

r - 在两个矩阵/数据帧中找到相同的行,然后在R中的矩阵/数据帧之一中删除

htmlwidgets 并排在 html 中?

r - 从长数据帧到宽数组的快速转换

r - 如何在 R 中附加到文档术语矩阵?

r - 在 Shiny 中创建有条件可见的侧边栏

R:将包含大量数据的图表导出为 .png 的更快方法?

r - 变量赋值:某个帖子中 "<-"和 "="之间的差异并避免使用 "return"

r - 如何在以下代码中获得 x 轴标签的 45 角

r - 如何将 observeEvent 与复选框事件一起使用 Shiny