【问题标题】:How to estimate percent of time seen depending on the variables "Datetime" and "Number of times seen per hour"如何根据变量“日期时间”和“每小时看到的次数”估计看到的时间百分比
【发布时间】:2019-07-08 13:33:35
【问题描述】:

在这篇文章 (How to add a variable that estimate the proportion of days someone has been seen since the first time) 中,我问了一些与最终目标相似的问题,但这里的数据框完全不同。

在这里,df1 汇总每小时 (Datetime) 在特定感兴趣区域内看到特定动物 (ID) 的次数 (Times_seen_per_hour)。由于我们知道此时动物是否在该区域,因此我们还创建了列Presence,指示该动物是否在我们可以检测到的区域。

我想知道检测到该动物的小时数与我们知道该动物在该区域的总小时数的比例。

这里是我现在拥有的示例:

df1<- data.frame(Datetime= ymd_hms(c("2019-05-20 12:00:00","2019-05-20 12:00:00","2019-05-20 13:00:00","2019-05-20 13:00:00","2019-05-20 14:00:00","2019-05-20 14:00:00","2019-05-20 15:00:00","2019-05-20 15:00:00","2019-05-20 16:00:00","2019-05-20 16:00:00","2019-05-20 17:00:00","2019-05-20 17:00:00","2019-05-20 18:00:00","2019-05-20 18:00:00","2019-05-20 19:00:00","2019-05-20 19:00:00")),
                 ID= c(1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2),
                 Times_seen_per_hour=c(3,0,0,4,2,1,3,2,1,0,0,0,7,0,4,1),
                 Presence= c(TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE))
df1

              Datetime ID Times_seen_per_hour Presence
1  2019-05-20 12:00:00  1                   3     TRUE
2  2019-05-20 12:00:00  2                   0    FALSE
3  2019-05-20 13:00:00  1                   0     TRUE
4  2019-05-20 13:00:00  2                   4     TRUE
5  2019-05-20 14:00:00  1                   2     TRUE
6  2019-05-20 14:00:00  2                   1     TRUE
7  2019-05-20 15:00:00  1                   3     TRUE
8  2019-05-20 15:00:00  2                   2     TRUE
9  2019-05-20 16:00:00  1                   1     TRUE
10 2019-05-20 16:00:00  2                   0    FALSE
11 2019-05-20 17:00:00  1                   0     TRUE
12 2019-05-20 17:00:00  2                   0    FALSE
13 2019-05-20 18:00:00  1                   7     TRUE
14 2019-05-20 18:00:00  2                   0     TRUE
15 2019-05-20 19:00:00  1                   4     TRUE
16 2019-05-20 19:00:00  2                   1     TRUE

如前所述,我需要创建一个名为 Prop_hours_seen 的新变量,它表示动物被看到的小时数与我们知道动物在那里的总小时数的比例 (Presence == TRUE)。

我希望这样:

> df1
              Datetime ID Times_seen_per_hour Presence Prop_hours_seen
1  2019-05-20 12:00:00  1                   3     TRUE            1.00 # We divide number of hours seen between total number of hours it could have been seen, that is 1/1.
2  2019-05-20 12:00:00  2                   0    FALSE              NA # We don't consider this hour since the animal wasn't in our area of interest.
3  2019-05-20 13:00:00  1                   0     TRUE            0.50 # We divide number of hours seen (it was seen 1 hour) between total number of hours it could have been seen (it could have been seen at 12:00:00 and at 13:00:00), that is 1/2=0.5.
4  2019-05-20 13:00:00  2                   4     TRUE            1.00
5  2019-05-20 14:00:00  1                   2     TRUE            0.66
6  2019-05-20 14:00:00  2                   1     TRUE            1.00
7  2019-05-20 15:00:00  1                   3     TRUE            0.75
8  2019-05-20 15:00:00  2                   2     TRUE            1.00
9  2019-05-20 16:00:00  1                   1     TRUE            0.80
10 2019-05-20 16:00:00  2                   0    FALSE              NA
11 2019-05-20 17:00:00  1                   0     TRUE            0.66
12 2019-05-20 17:00:00  2                   0    FALSE              NA
13 2019-05-20 18:00:00  1                   7     TRUE            0.71
14 2019-05-20 18:00:00  2                   0     TRUE            0.75
15 2019-05-20 19:00:00  1                   4     TRUE            0.75
16 2019-05-20 19:00:00  2                   1     TRUE            0.80

我知道这很难理解,有人知道怎么做吗?

【问题讨论】:

  • 为什么 Times_seen_per_hour 为 0 而 Presence 为 TRUE?如果是 0 不应该是FALSE
  • 这不是和之前的问题类似吗?
  • 谢谢。不,我和鱼一起工作。 Presence == TRUE 表示鱼在我感兴趣的区域,Presence== FALSE 表示鱼不在此区域。但是鱼在我的区域并不意味着我们用眼睛发现了它,因为有时它们是隐藏的。所以,我想知道我们可以看到鱼的小时数与我们知道鱼在那里的总小时数的比例。你明白吗?
  • “我们将看到的小时数除以(看到 1 小时)” - 但该 ID 会在另外 8 小时内看到?
  • 与我提出的其他数据框的不同之处在于,尽管鱼不在那里,但我在这里每个人和每小时都有一行。如果Times_seen_per_hour0 并且PresenceFALSE,则意味着鱼不在那里。但是如果Times_seen_per_hour0 并且PresenceTRUE,则意味着它就在那里,我们看不到它。所以我必须在这里管理这些东西才能得到我想要的......

标签: r tidyverse lubridate


【解决方案1】:

这似乎与您想要的输出相匹配。 请注意,这假设每个小时都会有一行 1:length(Datetime)

df1 %>%
  arrange(ID, Datetime) %>%
  group_by(ID) %>%
  mutate(hours_passed = 1:length(Datetime),
         hours_seen = cumsum(Times_seen_per_hour > 0),
         cumulative_presence = cumsum(Presence),
         prop_hours_seen = hours_seen / cumulative_presence,
         prop_hours_seen = ifelse(Presence, prop_hours_seen, NA)) %>%
  arrange(Datetime, ID)

Datetime               ID Times_seen_per_hour Presence prop_hours_seen
   <dttm>              <dbl>               <dbl> <lgl>              <dbl>
 1 2019-05-20 12:00:00     1                   3 TRUE               1    
 2 2019-05-20 12:00:00     2                   0 FALSE             NA    
 3 2019-05-20 13:00:00     1                   0 TRUE               0.5  
 4 2019-05-20 13:00:00     2                   4 TRUE               1    
 5 2019-05-20 14:00:00     1                   2 TRUE               0.667
 6 2019-05-20 14:00:00     2                   1 TRUE               1    
 7 2019-05-20 15:00:00     1                   3 TRUE               0.75 
 8 2019-05-20 15:00:00     2                   2 TRUE               1    
 9 2019-05-20 16:00:00     1                   1 TRUE               0.8  
10 2019-05-20 16:00:00     2                   0 FALSE             NA    
11 2019-05-20 17:00:00     1                   0 TRUE               0.667
12 2019-05-20 17:00:00     2                   0 FALSE             NA    
13 2019-05-20 18:00:00     1                   7 TRUE               0.714
14 2019-05-20 18:00:00     2                   0 TRUE               0.75 
15 2019-05-20 19:00:00     1                   4 TRUE               0.75 
16 2019-05-20 19:00:00     2                   1 TRUE               0.8 

【讨论】:

  • @zacdav,你知道如何通过 ID 总结看到鱼的不同小时数以及鱼在我们区域的总小时数吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多