การจัดกลุ่มข้อมูลเวลาเหตุการณ์ตามเงื่อนไขการทำซ้ำหลายรายการ

ฉันมีชุดข้อมูล ~190,000 แถวซึ่งประกอบด้วย: ข้อมูลตัวอย่าง: พบที่นี่:

 > df[1:100,1:6]
    AcousticTagCode      Species SiteCode         StartDetection           EndDetection Duration_min
1           5004.24 Striped Bass     RGD1 2014-10-01 23:01:12.12 2014-10-01 23:59:41.41    58.488167
2           5004.24 Striped Bass     RGD1 2014-10-02 00:00:06.06 2014-10-02 01:00:00.00    59.892167
3           5004.24 Striped Bass     RGD1 2014-10-02 01:00:01.01 2014-10-02 01:20:12.12    20.185167
4           5004.24 Striped Bass     RGD1 2014-10-02 04:14:15.15 2014-10-02 04:32:16.16    18.016833
5           5004.24 Striped Bass     RGD1 2014-10-02 22:00:06.06 2014-10-02 22:59:54.54    59.791167
6           5004.24 Striped Bass     RGD1 2014-10-02 23:00:10.10 2014-10-02 23:59:55.55    59.740667
7           5004.24 Striped Bass     RGD1 2014-10-03 00:00:08.08 2014-10-03 00:59:46.46    59.639667
8           5004.24 Striped Bass     RGD1 2014-10-03 01:00:10.10 2014-10-03 01:58:18.18    58.134667
9           5004.24 Striped Bass     RGD1 2014-10-03 02:05:05.05 2014-10-03 02:36:11.11    31.101000
10          5004.24 Striped Bass     RGD1 2014-10-03 04:01:03.03 2014-10-03 04:43:35.35    42.538667
11          5004.24 Striped Bass     RGD1 2014-10-03 06:00:15.15 2014-10-03 06:48:23.23    48.134667
12          5004.24 Striped Bass     RGD1 2014-10-03 07:02:00.00 2014-10-03 07:57:33.33    55.555500
13          5004.24 Striped Bass     RGD1 2014-10-03 08:04:27.27 2014-10-03 08:59:19.19    54.865333
14          5004.24 Striped Bass     RGD1 2014-10-03 09:01:03.03 2014-10-03 09:59:36.36    58.555500
15          5004.24 Striped Bass     RGD1 2014-10-03 10:00:33.33 2014-10-03 10:58:50.50    58.286167
16          5004.24 Striped Bass     RGD1 2014-10-03 11:00:02.02 2014-10-03 11:59:56.56    59.892167
17          5004.24 Striped Bass     RGD1 2014-10-03 12:00:10.10 2014-10-03 12:18:01.01    17.848500
18          5004.24 Striped Bass     RGD1 2014-10-03 13:08:56.56 2014-10-03 13:24:06.06    15.175167
19          5004.24 Striped Bass     RGD1 2014-10-03 14:29:00.00 2014-10-03 14:58:52.52    29.865333
20          5004.24 Striped Bass     RGD1 2014-10-03 15:00:05.05 2014-10-03 15:59:17.17    59.202000
21          5004.24 Striped Bass     RGD1 2014-10-03 16:05:47.47 2014-10-03 16:59:50.50    54.050500
22          5004.24 Striped Bass     RGD1 2014-10-03 17:00:05.05 2014-10-03 17:43:37.37    43.538667
23          5004.24 Striped Bass     RGD1 2014-10-03 18:02:10.10 2014-10-03 18:38:58.58    36.791167
24          5004.24 Striped Bass     RGD1 2014-10-03 19:03:44.44 2014-10-03 19:58:26.26    54.697000
25          5004.24 Striped Bass     RGD1 2014-10-03 20:09:42.42 2014-10-03 20:58:24.24    48.697000
26          5004.24 Striped Bass     RGD1 2014-10-03 21:00:05.05 2014-10-03 21:59:03.03    58.966333
27          5004.24 Striped Bass     RGD1 2014-10-03 22:00:23.23 2014-10-03 22:59:46.46    59.387167
28          5004.24 Striped Bass     RGD1 2014-10-03 23:00:41.41 2014-10-03 23:59:29.29    58.798000
29          5004.24 Striped Bass     RGD1 2014-10-04 09:16:18.18 2014-10-04 09:59:35.35    43.286167
30          5004.24 Striped Bass     RGD1 2014-10-04 10:00:05.05 2014-10-04 10:59:18.18    59.218833
31          5004.24 Striped Bass     RGD1 2014-10-04 11:00:05.05 2014-10-04 11:59:59.59    59.892167
32          5004.24 Striped Bass     RGD1 2014-10-04 12:00:01.01 2014-10-04 12:59:49.49    59.808000
33          5004.24 Striped Bass     RGD1 2014-10-04 13:00:23.23 2014-10-04 13:42:25.25    42.033667
34          5004.24 Striped Bass     RGD1 2014-10-04 14:00:55.55 2014-10-04 14:53:26.26    52.528667
35          5004.24 Striped Bass     RGD1 2014-10-04 15:00:32.32 2014-10-04 15:24:24.24    23.865333
36          5004.24 Striped Bass     RGD1 2014-10-04 17:20:04.04 2014-10-04 17:24:09.09     4.084167
37          5004.24 Striped Bass     RGD1 2014-10-04 18:23:54.54 2014-10-04 18:52:30.30    28.612833
38          5004.24 Striped Bass     RGD1 2014-10-04 19:04:09.09 2014-10-04 19:59:58.58    55.808000
39          5004.24 Striped Bass     RGD1 2014-10-04 20:00:02.02 2014-10-04 20:59:56.56    59.892167
40          5004.24 Striped Bass     RGD1 2014-10-04 21:00:00.00 2014-10-04 21:59:59.59    59.976333
41          5004.24 Striped Bass     RGD1 2014-10-04 22:00:03.03 2014-10-04 22:59:57.57    59.892167
42          5004.24 Striped Bass     RGD1 2014-10-04 23:00:13.13 2014-10-04 23:59:57.57    59.723833
43          5004.24 Striped Bass     RGD1 2014-10-05 00:00:00.00 2014-10-05 00:59:43.43    59.723833
44          5004.24 Striped Bass     RGD1 2014-10-05 01:01:34.34 2014-10-05 01:59:58.58    58.387167
45          5004.24 Striped Bass     RGD1 2014-10-05 02:00:02.02 2014-10-05 02:57:00.00    56.959500
46          5004.24 Striped Bass     RGD1 2014-10-05 03:08:26.26 2014-10-05 03:58:33.33    50.117833
47          5004.24 Striped Bass     RGD1 2014-10-05 04:00:59.59 2014-10-05 04:58:36.36    57.629667
48          5004.24 Striped Bass     RGD1 2014-10-05 05:03:22.22 2014-10-05 05:54:09.09    50.781167
49          5004.24 Striped Bass     RGD1 2014-10-05 06:00:40.40 2014-10-05 06:57:54.54    57.218833
50          5004.24 Striped Bass     RGD1 2014-10-05 07:11:13.13 2014-10-05 07:59:52.52    48.639667
51          5004.24 Striped Bass     RGD1 2014-10-05 08:00:11.11 2014-10-05 08:59:55.55    59.723833
52          5004.24 Striped Bass     RGD1 2014-10-05 09:00:43.43 2014-10-05 09:59:52.52    59.134667
53          5004.24 Striped Bass     RGD1 2014-10-05 10:00:22.22 2014-10-05 10:56:15.15    55.882167
54          5004.24 Striped Bass     RGD1 2014-10-05 11:02:31.31 2014-10-05 11:53:29.29    50.966333
55          5004.24 Striped Bass     RGD1 2014-10-05 13:54:22.22 2014-10-05 13:59:12.12     4.831667
56          5004.24 Striped Bass     RGD1 2014-10-05 22:00:40.40 2014-10-05 22:59:59.59    59.303000
57          5004.24 Striped Bass     RGD1 2014-10-05 23:00:03.03 2014-10-05 23:59:37.37    59.572333
58          5004.24 Striped Bass     RGD1 2014-10-06 00:00:36.36 2014-10-06 00:59:19.19    58.713833
59          5004.24 Striped Bass     RGD1 2014-10-06 01:00:00.00 2014-10-06 01:59:54.54    59.892167
60          5004.24 Striped Bass     RGD1 2014-10-06 02:00:38.38 2014-10-06 02:59:46.46    59.134667
61          5004.24 Striped Bass     RGD1 2014-10-06 03:03:03.03 2014-10-06 03:59:16.16    56.218833
62          5004.24 Striped Bass     RGD1 2014-10-06 04:00:11.11 2014-10-06 04:36:28.28    36.286167
63          5004.24 Striped Bass     RGD1 2014-10-06 05:16:11.11 2014-10-06 05:58:33.33    42.370333
64          5004.24 Striped Bass     RGD1 2014-10-06 12:00:40.40 2014-10-06 12:58:17.17    57.612833
65          5004.24 Striped Bass     RGD1 2014-10-06 18:02:17.17 2014-10-06 18:12:23.23    10.101000
66          5004.24 Striped Bass     RGD1 2014-10-06 19:44:35.35 2014-10-06 19:58:00.00    13.410833
67          5004.24 Striped Bass     RGD1 2014-10-06 20:02:00.00 2014-10-06 20:59:59.59    57.976333
68          5004.24 Striped Bass     RGD1 2014-10-06 21:00:03.03 2014-10-06 21:43:15.15    43.202000
69          5004.24 Striped Bass     RGD1 2014-10-06 22:21:58.58 2014-10-06 22:59:49.49    37.865333
70          5004.24 Striped Bass     RGD1 2014-10-06 23:00:35.35 2014-10-06 23:57:08.08    56.545500
71          5004.24 Striped Bass     RGD1 2014-10-07 00:01:01.01 2014-10-07 00:59:19.19    58.303000
72          5004.24 Striped Bass     RGD1 2014-10-07 01:01:32.32 2014-10-07 01:53:55.55    52.370333
73          5004.24 Striped Bass     RGD1 2014-10-07 02:14:45.45 2014-10-07 02:59:33.33    44.798000
74          5004.24 Striped Bass     RGD1 2014-10-07 03:15:54.54 2014-10-07 03:59:57.57    44.050500
75          5004.24 Striped Bass     RGD1 2014-10-07 04:00:05.05 2014-10-07 04:31:31.31    31.437667
76          5004.24 Striped Bass     RGD1 2014-10-07 05:33:56.56 2014-10-07 05:59:16.16    25.343500
77          5004.24 Striped Bass     RGD1 2014-10-07 06:32:00.00 2014-10-07 06:43:00.00    11.006833
78          5004.24 Striped Bass     RGD1 2014-10-07 07:02:25.25 2014-10-07 07:29:22.22    26.949500
79          5004.24 Striped Bass     RGD1 2014-10-07 08:00:43.43 2014-10-07 08:51:26.26    50.713833
80          5004.24 Striped Bass     RGD1 2014-10-07 09:04:32.32 2014-10-07 09:46:55.55    42.370333
81          5004.24 Striped Bass     RGD1 2014-10-07 10:03:05.05 2014-10-07 10:32:47.47    29.707000
82          5004.24 Striped Bass     RGD1 2014-10-07 11:52:15.15 2014-10-07 11:59:56.56     7.673333
83          5004.24 Striped Bass     RGD1 2014-10-07 12:00:02.02 2014-10-07 12:42:19.19    42.286167
84          5004.24 Striped Bass     RGD1 2014-10-07 13:03:10.10 2014-10-07 13:59:59.59    56.808000
85          5004.24 Striped Bass     RGD1 2014-10-07 20:47:56.56 2014-10-07 20:50:00.00     2.074167
86          5004.24 Striped Bass     RGD1 2014-10-07 21:27:12.12 2014-10-07 21:59:08.08    31.932667
87          5004.24 Striped Bass     RGD1 2014-10-07 22:02:49.49 2014-10-07 22:59:16.16    56.444500
88          5004.24 Striped Bass     RGD1 2014-10-07 23:00:27.27 2014-10-07 23:58:00.00    57.545500
89          5004.24 Striped Bass     RGD1 2014-10-08 00:01:07.07 2014-10-08 01:00:00.00    58.882167
90          5004.24 Striped Bass     RGD1 2014-10-08 01:00:09.09 2014-10-08 01:59:57.57    59.791167
91          5004.24 Striped Bass     RGD1 2014-10-08 02:00:05.05 2014-10-08 02:59:03.03    58.966333
92          5004.24 Striped Bass     RGD1 2014-10-08 03:04:10.10 2014-10-08 03:55:12.12    51.033667
93          5004.24 Striped Bass     RGD1 2014-10-08 05:26:26.26 2014-10-08 05:59:28.28    33.033667
94          5004.24 Striped Bass     RGD1 2014-10-08 06:02:49.49 2014-10-08 06:59:58.58    57.134667
95          5004.24 Striped Bass     RGD1 2014-10-08 07:00:02.02 2014-10-08 07:59:40.40    59.639667
96          5004.24 Striped Bass     RGD1 2014-10-08 08:00:07.07 2014-10-08 08:59:50.50    59.723833
97          5004.24 Striped Bass     RGD1 2014-10-08 09:01:13.13 2014-10-08 09:51:35.35    50.370333
98          5004.24 Striped Bass     RGD1 2014-10-08 10:04:53.53 2014-10-08 10:59:09.09    54.276167
99          5004.24 Striped Bass     RGD1 2014-10-08 11:06:27.27 2014-10-08 11:31:23.23    24.932667
100         5004.24 Striped Bass     RGD1 2014-10-08 20:03:30.30 2014-10-08 20:59:59.59    56.471333
  1. ตัวระบุเฉพาะบุคคล "AcousticTagCode"
  2. สายพันธุ์ของแต่ละบุคคล "สายพันธุ์"
  3. ไซต์สังเกตการณ์ "SiteCode"
  4. เวลาเริ่มต้นสำหรับเหตุการณ์ "StartDetection"
  5. เวลาสิ้นสุดสำหรับเหตุการณ์ "EndDetection"
  6. ระยะเวลาของกิจกรรม "Duration_min"

      AcousticTagCode      Species SiteCode         StartDetection           EndDetection Duration_min
    1         5004.24 Striped Bass     RGD1 2014-10-01 23:01:12.12 2014-10-01 23:59:41.41     58.48817
    2         5004.24 Striped Bass     RGD1 2014-10-02 00:00:06.06 2014-10-02 01:00:00.00     59.89217
    3         5004.24 Striped Bass     RGD1 2014-10-02 01:00:01.01 2014-10-02 01:20:12.12     20.18517
    4         5004.24 Striped Bass     RGD1 2014-10-02 04:14:15.15 2014-10-02 04:32:16.16     18.01683
    5         5004.24 Striped Bass     RGD1 2014-10-02 22:00:06.06 2014-10-02 22:59:54.54     59.79117
    6         5004.24 Striped Bass     RGD1 2014-10-02 23:00:10.10 2014-10-02 23:59:55.55     59.74067
    

มีการวิเคราะห์ในรายงานล่าสุด โดยที่ ผู้เขียนใช้การวิเคราะห์การอยู่รอดเพื่อกำหนดเวลาที่อยู่อาศัยต่อเนื่อง (CRT) ที่ไซต์งานโดยการกำหนดช่วงเวลาที่เหมาะสมหรือระยะเวลาสูงสุดที่ว่าง* (MBP*) ระหว่างการตรวจจับติดต่อกันซึ่งเป็นไปได้ว่าบุคคลนั้นยังคงอาศัยอยู่ที่ไซต์ แต่ อยู่นอกขอบเขตการตรวจจับ

โครงร่างพื้นฐานคือ:

กำหนดช่วงเวลาเริ่มต้นสำหรับ 1 MBP

mbp <- 7 #seconds

สร้างรายการจำนวนเต็มเพื่อคูณด้วย MBP เพื่อทดสอบการวิเคราะห์การอยู่รอดในช่วงเวลาต่างๆ

n = c(1,2,4,8,16,32,64,128,256,512)

นี่ฉันติดอยู่ตรงไหน สำหรับแต่ละค่าของ n ฉันต้องพิจารณาว่า

n*mbp > StartDetection of Event[i+1] - EndDetection of Event[i]  

หากการประเมินข้างต้นเป็น True ฉันจะเพิ่มระยะเวลาของเหตุการณ์ทั้งหมดจนกระทั่งเหตุการณ์ที่การประเมินข้างต้นเป็นเท็จหรือการเปลี่ยนแปลง TagCode หรือการเปลี่ยนแปลง SiteCode

ตัวอย่างเช่น หาก n=1 และ mbp = 7 ในบรรทัดที่ 2 ด้านบน เวลาของ EndDetection คือ 01:00:00.00 และเวลา StartDetection ของเหตุการณ์ใหม่ (บรรทัดที่ 3) คือ 01:00:01.01 ความแตกต่างคือ 1.01 วินาทีซึ่งน้อยกว่า n*mbp ดังนั้นฉันจะเพิ่มระยะเวลาของบรรทัด 2 และ 3 เป็นตัวแปรใหม่ CRT ปัญหาคือเมื่อมากกว่า 2 เหตุการณ์ติดต่อกันทั้งหมดตรงตามเกณฑ์ข้างต้นดังต่อไปนี้:

   AcousticTagCode      Species SiteCode         StartDetection           EndDetection Duration_min
38         5004.24 Striped Bass     RGD1 2014-10-04 19:04:09.09 2014-10-04 19:59:58.58     55.80800
39         5004.24 Striped Bass     RGD1 2014-10-04 20:00:02.02 2014-10-04 20:59:56.56     59.89217
40         5004.24 Striped Bass     RGD1 2014-10-04 21:00:00.00 2014-10-04 21:59:59.59     59.97633
41         5004.24 Striped Bass     RGD1 2014-10-04 22:00:03.03 2014-10-04 22:59:57.57     59.89217

ที่นี่ เหตุการณ์จากบรรทัด 38-41 ทั้งหมดเกิดขึ้นภายใน 7 วินาทีจากกัน AcousticTagCode จะเหมือนกัน และ SiteCode ยังคงอยู่ที่ RGD1 ดังนั้นระยะเวลาของเหตุการณ์ทั้งหมดจะต้องถูกรวมเข้าด้วยกันและเรียกว่า CRT

มีวิธีที่ฉันสามารถนำชุดข้อมูลเริ่มต้นที่นี่และสร้าง dataframe ใหม่ (df_n) สำหรับการวนซ้ำแต่ละครั้งของ n ซึ่งมีคอลัมน์:

AcousticTagCode Species SiteCode CRT

การใช้สองตัวอย่างด้านบนจะมีลักษณะเหมือนบรรทัดที่ 2 และ n ด้านล่าง:

head(df_1)
  AcousticTagCode      Species SiteCode    CRT
1         5004.24 Striped Bass     RGD1  58.49
2         5004.24 Striped Bass     RGD1  80.08
...
i         5004.24 Striped Bass     RGD1 235.57

นอกจากนี้ เมื่อใดก็ตามที่ไม่ตรงตามเงื่อนไข เหตุการณ์จะถือเป็นเหตุการณ์แบบสแตนด์อโลน และ CRT = Duration ตามที่เห็นในบรรทัดตารางด้านบน 1

ชุดทักษะของฉันที่มี R ค่อนข้างเป็นพื้นฐาน ฉันแน่ใจว่ามีวิธีง่ายๆ ในการทำเช่นนี้ แต่ฉันไม่รู้ และทักษะการค้นหาของฉันก็ไม่ได้มีประโยชน์อะไรที่เป็นประโยชน์จากระยะไกล

ข้อมูลตัวอย่าง: พบที่นี่:


person Taylor Spaulding    schedule 15.08.2019    source แหล่งที่มา
comment
โปรด dput() ตัวอย่างข้อมูลของคุณ ขอบคุณ.   -  person kstew    schedule 16.08.2019
comment
@kstew ฉันได้ให้ลิงก์ไปยัง CSV ฉบับเต็มที่ด้านล่างของข้อความ ตอนนี้ฉันได้เพิ่มผลลัพธ์จาก dput()   -  person Taylor Spaulding    schedule 16.08.2019
comment
dput() ใหญ่เกินกว่าจะวางได้ ฉันวางไว้ใน 100 แถวแรกแล้ว   -  person Taylor Spaulding    schedule 16.08.2019


คำตอบ (1)


ดูเหมือนว่าคุณกำลังพยายามทำสองสิ่ง: 1) สำหรับแต่ละชุดที่ไม่ซ้ำกันของอะคูสติก สายพันธุ์ รหัสไซต์ และเวลาเริ่มต้น ให้ค้นหากรณีไซต์ชนิดอะคูสติกที่ตรงกันอื่นๆ ทั้งหมด โดยที่เวลาเริ่มต้นคือ ‹= (mbp + เวลาสิ้นสุดของชุดค่าผสมดั้งเดิม) จากนั้นเพิ่มระยะเวลาเพื่อรับ CRT 2) ทำซ้ำขั้นตอนนี้สำหรับแต่ละค่าของ mbp x n

เนื่องจากคุณไม่ได้รวมข้อมูลตัวอย่างใดๆ ฉันจึงได้สร้างข้อมูลตัวอย่างเพื่อลองและจับคู่ข้อมูลของคุณ: 100 กรณี โดยที่อะคูสติก a อาจเป็น 1 หรือ 2, species อาจเป็น 'เบส' หรือ 'ปลาเทราท์', site อาจเป็น 'p ' หรือ 'q' ค่าสุ่มบางค่า เวลาเริ่มต้น และเวลาสิ้นสุดที่สุ่มสิ้นสุด 5-15 วินาทีหลังจากเวลาเริ่มต้นแต่ละครั้ง

set.seed(123)
df <- data.frame(a=sample(1:2,100,T),species=sample(c('bass','trout'),100,T),
                 site=sample(c('p','q'),100,T),
                 value=round(runif(100),2),
                 start=sample(seq(c(ISOdate(2000,1,1,0,0,0)), by = "sec", length.out = 100),100,F),
                 stringsAsFactors = F)
df$end <- df$start + sample(c(5:15),length(df$start),T)

เพื่อให้บรรลุข้อ 1 ฉันคิดว่าคุณสามารถใช้วิธีนี้ได้: ใช้ complete เพื่อสร้างลำดับเวลาภายใน 7 วินาทีของแต่ละชุดค่าผสม จากนั้นใช้ลำดับที่เป็นไปได้เพื่อรวมข้อมูลต้นฉบับของคุณ ตัวอย่างเช่น หากคุณมีแถวที่มี 1-bass-p และเวลาสิ้นสุด 00:00:21 รายการที่เป็นไปได้คือเมื่อแถว 1-bass-p อื่นๆ มีเวลาเริ่มต้นตั้งแต่ 00:00:22 ถึง 00:00:28 น.

df1 <- df %>% arrange(a,species,site,end) %>% 
  distinct(a,species,site,start,end) %>% 
  mutate(end.orig = end) %>% 
  group_by(a,species,site,start,end,end.orig) %>% 
  complete(end=seq(from=end,to=(end+7),by='sec'))

df.orig <- df1 %>% select(-end.orig) %>% left_join(.,df) %>% filter(!is.na(value))

df.match <- df1 %>% ungroup %>% select(-start) %>% rename(start=end) %>% left_join(.,df) %>% 
  filter(!is.na(value))

bind_rows(df.orig %>% ungroup %>% select(a,species,site,value,end.orig),
          df.match %>% ungroup %>% select(a,species,site,value,end.orig)) %>% 
  group_by(a,species,site,end.orig) %>% 
  summarise(crt=sum(value),n=n())

# A tibble: 97 x 6
# Groups:   a, species, site [8]
       a species site  end.orig              crt     n
   <int> <chr>   <chr> <dttm>              <dbl> <int>
 1     1 bass    p     2000-01-01 00:00:21  1.58     3
 2     1 bass    p     2000-01-01 00:00:26  1.38     4
 3     1 bass    p     2000-01-01 00:00:36  2.27     4
 4     1 bass    p     2000-01-01 00:00:42  1.69     3
 5     1 bass    p     2000-01-01 00:00:46  1.23     2
 6     1 bass    p     2000-01-01 00:00:55  0.84     1
 7     1 bass    p     2000-01-01 00:01:02  1.32     2
 8     1 bass    p     2000-01-01 00:01:18  0.74     2
 9     1 bass    p     2000-01-01 00:01:29  0.54     2
10     1 bass    p     2000-01-01 00:01:42  0.42     1
# ... with 87 more rows

เพื่อให้บรรลุผลสำเร็จ 2 คุณสามารถใช้ lapply เพื่อทำซ้ำขั้นตอนนี้กับค่า mbp x n ของคุณ ซึ่งจะส่งคืนรายการองค์ประกอบ 10 รายการ (เช่น ความยาว n x mbp)

mbp <- 7; n <- c(1,2,4,8,16,32,64,128,256,512) * mbp

f <- lapply(1:length(n), function(x){
  df1 <- df %>% arrange(a,species,site,end) %>% 
    distinct(a,species,site,start,end) %>% 
    mutate(end.orig = end) %>% 
    group_by(a,species,site,start,end,end.orig) %>% 
    complete(end=seq(from=end,to=(end + n[x]),by='sec')) ### x is here

  df.orig <- df1 %>% select(-end.orig) %>% left_join(.,df) %>% filter(!is.na(value))

  df.match <- df1 %>% ungroup %>% select(-start) %>% rename(start=end) %>% left_join(.,df) %>% 
    filter(!is.na(value))

  out <- bind_rows(df.orig %>% ungroup %>% select(a,species,site,value,end.orig),
            df.match %>% ungroup %>% select(a,species,site,value,end.orig)) %>% 
    group_by(a,species,site,end.orig) %>% 
    summarise(crt=sum(value),n=n())

  return(out)
})
person kstew    schedule 15.08.2019
comment
ฉันคิดว่ามันใช้งานได้โดยทั่วไป แต่ฉันมีปัญหาสองสามข้อ: แรก 1) ฉันเชื่อว่าขณะนี้โค้ดกำลังนับอินสแตนซ์ซ้ำซ้อน สำหรับบรรทัดที่ 1 ควรมีเพียง n=1 แต่ n=2 และค่าของระยะเวลาเป็นสองเท่าของที่ควรเป็น 2) ถ้ามันจะวนซ้ำผ่าน n หลายตัวและเก็บมันทั้งหมดไว้ใน f ควรมีฟิลด์ใน f ที่กำหนดการวนซ้ำหรือไม่? ฉันจะเพิ่มข้อมูลเพิ่มเติมเพื่อช่วยให้ตรวจสอบได้ง่ายขึ้น - person Taylor Spaulding; 16.08.2019
comment
ฉันพบปัญหากับการจัดรูปแบบวันที่และเวลา ฉันกำลังเรียกใช้อีกครั้งโดยใช้รูปแบบ POSIXct ที่ถูกต้อง - person Taylor Spaulding; 16.08.2019
comment
แต่ตอนนี้ฉันได้รับข้อผิดพลาดนี้ 12% ของวิธีการ: Error in seq.int(0, to0 - from, by) : 'to' must be afinite number - person Taylor Spaulding; 16.08.2019
comment
ข้อผิดพลาดนี้น่าจะมาจากปัญหากับ POSIXct เห็นได้ชัดว่าโปรแกรมที่สร้างไฟล์นี้ไม่ได้เปลี่ยนเวลาสำหรับ PDT เมื่อวันที่ 9 มีนาคม 2014 ดังนั้น การตรวจจับจำนวนหนึ่งจึงถูกบันทึกตั้งแต่เวลา 02:00 น. ถึง 03:00 น. ในช่วงเวลาที่ POSIX เชื่อว่าไม่มีวันที่ดังกล่าว ดังนั้นจึงบังคับให้ NA เข้าไปในชุดข้อมูล แก้ไขโดยบังคับให้เวลาทั้งหมดเป็น GMT เนื่องจากเวลาสัมบูรณ์มีความสำคัญน้อยกว่า - person Taylor Spaulding; 16.08.2019
comment
ตอนนี้มันใช้งานได้อย่างสวยงาม ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ @kstew - person Taylor Spaulding; 16.08.2019
comment
ฉันพบปัญหาเล็กน้อยในการใช้ tidyverse เพื่อทำงานนี้ให้สำเร็จ เมื่อ n มีขนาดใหญ่ (>64) หน่วยความจำของฉันกำลังจะหมดเนื่องจากขนาดของตาราง df1 ฉันกำลังพยายามลบความจำเป็นในการสร้างบรรทัดแยกสำหรับแต่ละวินาทีดังที่ทำในโค้ดของคุณในปัจจุบันโดยใช้ fuzzjoin เพื่อใช้ความไม่เท่าเทียมกันเพื่อทำการจับคู่ น่าเสียดายที่นั่นดูเหมือนว่าจะสร้างตารางที่ใหญ่ขึ้น ซึ่งดูแปลกสำหรับฉัน รหัสอยู่ด้านล่าง - person Taylor Spaulding; 19.08.2019