วิธีประมาณเปอร์เซ็นต์ของเวลาที่เห็น ขึ้นอยู่กับตัวแปร วันที่เวลา และ จำนวนครั้งที่เห็นต่อชั่วโมง

ในโพสต์นี้ (วิธีเพิ่มตัวแปรที่ประมาณสัดส่วนของวันที่มีคนเห็นใครบางคนตั้งแต่ครั้งแรก) ฉันถามบางสิ่งที่มีเป้าหมายสุดท้ายที่คล้ายกัน แต่ที่นี่ dataframe นั้นแตกต่างไปจากเดิมอย่างสิ้นเชิง

ในที่นี้ 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

ฉันรู้ว่ามันซับซ้อนที่จะเข้าใจ มีใครรู้วิธีทำบ้างไหม?


person Dekike    schedule 08.07.2019    source แหล่งที่มา
comment
ทำไมคุณถึงมี Times_seen_per_hour เป็น 0 แต่การแสดงตนเป็น TRUE ถ้าเป็น 0 ก็ไม่ควรเป็น FALSE เหรอ?   -  person Sotos    schedule 08.07.2019
comment
สิ่งนี้ไม่คล้ายกับคำถามก่อนหน้านี้ใช่ไหม   -  person akrun    schedule 08.07.2019
comment
ขอบคุณ. ไม่ ฉันทำงานกับปลา การแสดงตน == TRUE หมายความว่าปลาอยู่ในพื้นที่ที่ฉันสนใจ และการแสดงตน== FALSE หมายความว่าปลาอยู่นอกพื้นที่นี้ แต่การที่ปลาอยู่ในพื้นที่ของฉันไม่ได้หมายความว่าเราจะมองเห็นมันด้วยตาเพราะบางครั้งมันก็ซ่อนอยู่ เลยอยากทราบสัดส่วนชั่วโมงที่เราเห็นปลา กับจำนวนชั่วโมงทั้งหมดที่รู้ว่ามีปลาอยู่ด้วย คุณเข้าใจไหม?   -  person Dekike    schedule 08.07.2019
comment
เราแบ่งจำนวนชั่วโมงที่เห็น (เห็นเป็น 1 ชั่วโมง) - แต่ ID นั้นเห็นในอีกแปดชั่วโมง?   -  person zacdav    schedule 08.07.2019
comment
ข้อแตกต่างกับดาต้าเฟรมอื่นๆ ที่ฉันโพสต์คือที่นี่ฉันมีแถวต่อคนและต่อชั่วโมง แม้ว่าปลาจะไม่ได้อยู่ที่นั่นก็ตาม หาก Times_seen_per_hour คือ 0 และ Presence คือ FALSE แสดงว่าไม่มีปลาอยู่ที่นั่น แต่ถ้า Times_seen_per_hour คือ 0 และ Presence คือ TRUE แสดงว่าอยู่ที่นั่นและเรามองไม่เห็น ดังนั้นฉันจึงต้องจัดการสิ่งเหล่านั้นที่นี่เพื่อให้ได้สิ่งที่ฉันต้องการ...   -  person Dekike    schedule 08.07.2019
comment
@zacdav ฉันหมายถึงจนถึงแถวนี้ คุณเข้าใจไหม? ที่ 12:00:00 สามารถมองเห็นสัตว์ได้ที่ 12:00:00 ดังนั้นจำนวนชั่วโมงทั้งหมดที่สามารถมองเห็นสัตว์ได้คือ 1 สำหรับ ID หมายเลข 1 ในแถวที่ 3 เวลา 13:00:00 อาจเห็นได้ในสองชั่วโมงที่แตกต่างกัน (เวลา 12:00:00 และ 13:00:00) คุณเข้าใจไหม? ในแต่ละแถว ฉันพิจารณาเวลาก่อนหน้านี้ ไม่ใช่เวลาที่จะมาทีหลัง   -  person Dekike    schedule 08.07.2019


คำตอบ (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 
person zacdav    schedule 08.07.2019
comment
@ zacdav คุณรู้วิธีสรุปจำนวนชั่วโมงที่เห็นปลาและจำนวนชั่วโมงทั้งหมดที่ปลาอยู่ในพื้นที่ของเราด้วย ID หรือไม่ - person Dekike; 08.07.2019