【问题标题】:Assigning an DateTime interval to a DateTime Event将 DateTime 间隔分配给 DateTime 事件
【发布时间】:2019-10-25 18:03:24
【问题描述】:

我有一个 >1M 个人 DateTime 检测间隔表(即在此期间连续检测到一个人)和一个表 DateTime Intervals 表示门何时关闭。单个检测被分类为“IN”或“OUT”

使用 %within% 我已经能够确定检测是否在任何间隔内。

但是,我想做一些不同的事情。对于每个门关闭间隔,我想知道有多少人在外面被检测到,有多少人在里面。我相信最简单的方法是将每个检测事件分配给一个门周期,但我无法弄清楚如果没有极其混乱的嵌套 ifelse 语句将如何编写该函数。

预期输出(非真实数据):

  Tag     site  species      StartDateTime_UTC   EndDateTime_UTC     interval Location
   <fct>   <fct> <chr>        <dttm>              <dttm>                 <dbl> <chr>   
 1 5004.24 IC1   Striped Bass 2014-09-29 22:40:40 2014-09-29 22:46:35        1 IN      
 2 5004.24 IC1   Striped Bass 2014-09-29 22:49:15 2014-09-29 22:50:05        1 IN      
 3 5004.24 RGD1  Striped Bass 2014-10-01 23:01:12 2014-10-01 23:11:23        2 IN      
 4 5004.24 RGD1  Striped Bass 2014-10-01 23:16:18 2014-10-02 00:13:17        2 IN      
 5 5004.24 RGD1  Striped Bass 2014-10-02 00:15:47 2014-10-02 00:30:08        2 IN      
 6 5004.24 RGD1  Striped Bass 2014-10-02 00:33:12 2014-10-02 01:10:21        2 IN      
 7 5004.24 RGD1  Striped Bass 2014-10-02 01:13:01 2014-10-02 01:20:12        2 IN      
 8 5004.24 RGD1  Striped Bass 2014-10-02 04:14:15 2014-10-02 04:21:11        2 IN      
 9 5004.24 RGD1  Striped Bass 2014-10-02 04:23:31 2014-10-02 04:26:06       NA IN      
10 5004.24 RGD1  Striped Bass 2014-10-02 04:28:21 2014-10-02 04:32:16       NA IN      
11 5004.24 RGD1  Striped Bass 2014-10-02 22:00:06 2014-10-02 22:44:08       NA IN      
12 5004.24 RGD1  Striped Bass 2014-10-02 22:46:58 2014-10-02 23:08:21        5 IN      
13 5004.24 RGD1  Striped Bass 2014-10-02 23:10:36 2014-10-03 00:26:00        5 IN      
14 5004.24 RGD1  Striped Bass 2014-10-03 00:28:55 2014-10-03 00:51:35        5 IN      
15 5004.24 RGD1  Striped Bass 2014-10-03 00:55:06 2014-10-03 01:08:01        5 IN      
16 5004.24 RGD1  Striped Bass 2014-10-03 01:10:36 2014-10-03 01:17:21        6 IN      
17 5004.24 RGD1  Striped Bass 2014-10-03 01:20:41 2014-10-03 01:21:01        6 IN      
18 5004.24 RGD1  Striped Bass 2014-10-03 01:30:41 2014-10-03 01:31:07        6 IN      
19 5004.24 RGD1  Striped Bass 2014-10-03 01:35:02 2014-10-03 01:38:12        7 IN      
20 5004.24 RGD1  Striped Bass 2014-10-03 01:42:02 2014-10-03 01:58:18        7 IN      

门关闭时可能不会发生某些检测,因此“NA”有效

有更好的选择吗?

输入:

检测:

structure(list(Tag = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("5004.24", 
"5010.04", "5011.03", "5011.07", "5017.06", "5025.22", "5025.26", 
"5032.24", "5038.04", "5039.03", "5039.07", "5045", "5053.26", 
"5067.07", "5073.06", "5074.16", "5088.11", "5094.04", "5101.06", 
"5116.24", "5123.03", "5123.07", "5150.04", "5157.06", "5165.22", 
"5172.24", "5179.03", "5179.07", "5186.16", "5200.11", "5206.31", 
"5214.16", "5228.24", "5235", "5242.16", "5249", "5256.24", "5263.07", 
"5270.16", "5284.11", "5290.31", "5298.16", "5312.11", "5318.04", 
"5326.16", "5340.11", "5347.07", "5361.26", "5368.24", "5374.04", 
"5375.03", "5375.07", "5381.06", "5402.31", "5403.07", "5431.07", 
"5438.16", "5445.26", "5465.06", "5480.24", "5487.03", "5487.07", 
"5493.06", "5501.22", "5514.31", "5536.11", "5542.31", "5550.16", 
"5557.22", "5564.24", "5570.04", "5571.03", "5571.07", "5577", 
"5585.26", "5592.11", "5599.15", "5605.06", "5620.11", "5626.31", 
"5627.15", "5641.22", "5641.26", "5648.11", "5654.31", "5662.16", 
"5676.24", "5682.04", "5683.03", "5683.07", "5690.16", "5697.22", 
"5697.26", "5704.11", "5710.04", "5717.06", "5732.11", "5738.31", 
"5739.15", "5744.11", "5746.16", "5753", "5760.24", "5766.31", 
"5767.01", "5774.16", "5781.22", "5788.11", "5794.31", "5802.16", 
"5816.11", "5822.04", "5823.15", "5829.06", "5837.26", "5844.24", 
"5851.03", "5851.07", "5857.06", "5858.16", "5865.22", "5872.24", 
"5878.31", "5879.03", "5879.07", "5886.16", "5893.22", "5900.24", 
"5906.31", "5907.01", "5914.16", "5921.22", "5928.24", "5934.31", 
"5935.01", "5949.26", "5956.24", "5990.31", "5991.07", "5998.16", 
"6012.24", "6018.04", "6019.03", "6019.07", "6025.06", "6033.26", 
"6040.24", "6046.04", "6047.01", "6053", "6061", "6068.24", "6075.01", 
"6096.11", "6102.31", "6103.07", "6124.11", "6130.31", "6131.15", 
"6145.26", "6158.04", "6159.07", "6165.06", "6173.22", "6180.11", 
"6186.31", "6187.15", "6201.22", "6208.24", "6214.04", "6215.01", 
"6221.06", "6236.11", "6242.31", "6264.11", "6270.04", "6277.06", 
"6285.26", "6292.24", "6298.04", "6299.03", "6299.07", "6305.06", 
"6320.11", "6326.31", "6327.15", "6341.26", "6348.11", "6355.15", 
"6361.06", "6376.11", "6382.04", "6383.15", "6389.06", "6404.24", 
"6410.31", "6411.03", "6411.07", "6425.22", "6425.26", "6432.24", 
"6438.31", "6439.03", "6460.11", "6474.16", "6488.11", "6494.04", 
"6495.15", "6501.06", "6502.16", "6509.22", "6516.24", "6523.01", 
"6529.06", "6537.26", "6544.24", "6550.31", "6551.03", "6551.07", 
"6558.16", "6572.24", "6578.31", "6579.03", "6579.07", "6600.24", 
"6606.31", "6607.03", "6607.07", "6614.16", "6621.26", "6628.11", 
"6634.31", "6635.15", "6649.26", "6656.24", "6662.31", "6663.03", 
"6663.07", "6670.16", "6684.11", "6690.31", "6691.15", "6698.16", 
"6705.22", "6712.24", "6718.31", "6719.07", "6746.04", "6747.07", 
"6753.06", "6768.24", "6775.01", "6796.24", "6803.03", "6803.07", 
"6809.06", "6824.24", "6831.03", "6838.16", "6845", "6852.24", 
"6858.04", "6859.03", "6859.07", "6873.26", "6886.04", "6887.07", 
"6893.06", "6894.16", "6901.22", "6915.07", "6921.06", "6936.11", 
"6942.04", "6943.15", "6949.06", "6964.11", "6970.04", "6971.15", 
"6977.06", "6992.11", "6998.04", "6999.15", "7005.06", "7006.16", 
"7020.24", "7026.31", "7027.03", "7027.07", "7034.16", "7041.22", 
"7048.24", "7054.31", "7055.01", "7062.16", "7076.24", "7082.31", 
"7083.01", "7090.16", "7097", "7104.24", "7111.01", "7118.16", 
"7132.11", "7153.22", "7167.07", "7173.06", "7188.11", "7194.31", 
"7195.15", "7216.24", "7222.31", "7223.03", "7223.07", "7244.24", 
"7250.31", "7251.03", "7251.07", "7278.04", "7285.06", "7286.16", 
"7300.11", "7306.31", "7321.26", "7328.24", "7334.31", "7335.01", 
"7356.24", "7363", "7369.06", "7370.16", "7377.26", "7384.11", 
"7390.04", "7391.15", "7397.06", "7398.16", "7412.24", "7418.31", 
"7419.07", "7426.16", "7440.24", "7447.01", "7453.06", "7454.16", 
"7468.24", "7481.06", "7489", "7496.24", "7502.04", "7503.07", 
"7509", "7510.16", "7517.22", "7517.26", "7524.24", "7530.04", 
"7531.03", "7531.07", "7537.06", "7552.24", "7558.31", "7559.03", 
"7559.07", "7580.11", "7587.15", "7601.26", "7615.07", "7621.06", 
"7622.16", "7629.26", "7636.11", "7664.11", "7678.16", "7699.07", 
"7705.06", "7713.22", "7720.24", "7727.03", "7727.07", "7733.06", 
"7734.16", "7755.07", "7761.06", "7769.22", "7769.26", "7776.24", 
"7782.04", "7783.03", "7783.07", "7789.06", "7810.31", "7811.07", 
"7832.11", "7838.31", "7839.15", "7846.16", "7860.24", "7874.16", 
"7888.24", "7894.31", "7895.01", "7909.22", "7909.26", "7916.24", 
"7923", "7937", "7944.11", "7958.16", "7972.11", "7978.31", "7979.15", 
"8000.11", "8006.31", "8007.15", "8028.24", "8035.01", "8042.16", 
"8056.24", "8063.03", "8063.07", "8070.16", "8084.11", "8098.16", 
"8105.22", "8112.24", "8118.31", "8119.01", "8133.26", "8140.24", 
"8146.04", "8147.03", "8147.07", "8153.06", "8154.16", "8168.11", 
"8174.31", "8182.16", "8196.24", "8202.31", "8203.03", "8203.07", 
"8217.26", "8224.24", "8231.03", "8231.07", "8258.31", "8273.22", 
"8280.11", "8286.31", "8301.22", "8308.24", "8314.31", "8315.07", 
"8336.11", "8343.15", "8349.06", "8350.16", "8364.24", "8370.31", 
"8371.07", "8385", "8392.24", "8398.31", "8399.03", "8399.07", 
"8420.11", "8426.31", "8427.15", "8448.11", "8455.15", "8462.16", 
"8476.24", "8483.03", "8483.07", "8489.06", "8504.24", "8510.04", 
"8511.03", "8511.07", "8517.06", "8518.16", "8532.24", "8538.04", 
"8539.03", "8539.07", "8560.24", "8566.31", "8567.03", "8567.07", 
"8581.22", "8595.07", "8601.06", "8616.11", "8629.06", "8630.16", 
"8637.26", "8644.11", "8651.15", "8672.24", "8678.31", "8679.07", 
"8686.16", "8700.11", "8706.04", "8707.15", "8713.06", "8714.16", 
"8735.07", "8741.06", "8742.16", "8756.11", "8762.04", "8777.22", 
"8777.26", "8784.24", "8790.31", "8791.03", "8791.07", "8798.16", 
"8812.24", "8818.31", "8819.03", "8819.07", "8833.22", "8846.31", 
"8874.31", "8875.07", "8882.16", "8896.11", "8902.31", "8910.16", 
"8924.11", "8937.06", "8938.16", "8952.11", "8958.04", "8959.15", 
"8965.06", "8980.24", "8986.31", "8987.03", "8987.07", "8994.16", 
"9008.24", "9014.31", "9015.01", "9043.01", "9049.06", "9057.22", 
"9064.24", "9070.04", "9071.01", "9077.06", "9078.16", "9085.22", 
"9092.11", "9105.06", "9113.26", "9120.24", "9127.03", "9127.07", 
"9134.16", "9141.26", "9154.31", "9155.03", "9155.07", "9169.22", 
"9176.11", "9189.06", "9197", "9210.31", "9211.07", "9225", "9232.24", 
"9238.31", "9239.01", "9246.16", "9260.24", "9266.31", "9288.11", 
"9294.04", "9301.06", "9302.16", "9309.26", "9316.24", "9323.03", 
"9323.07", "9344.24", "9351.03", "9351.07", "9372.24", "9378.31", 
"9386.16", "9393.26", "9400.24", "9407.03", "9407.07", "9428.24", 
"9434.31", "9435.03", "9435.07", "9456.11", "9462.31", "9463.15", 
"9470.16", "9477.22", "9490.04", "9491.07", "9497.06", "9512.11", 
"9518.04", "9519.15", "9525.06", "9540.24", "9547.03", "9547.07", 
"9568.24", "9574.31", "9575.01", "9596.11", "9603.07", "9610.16", 
"9624.11", "9631.15", "9637.06", "9652.24", "9658.04", "9659.03", 
"9659.07", "9665.06", "9673.26", "9680.11", "9686.31", "9708.24", 
"9714.31", "9715.01", "9729.26", "9736.24", "9742.04", "9743.03", 
"9743.07", "9757.26", "9764.24", "9770.31", "9771.07", "9785.22", 
"9785.26", "9792.24", "9798.31", "9813.22", "9820.24", "9826.04", 
"9827.03", "9827.07", "9833.06", "9841.22", "9848.11", "9855.15", 
"9862.16", "9869.26", "9876.24", "9882.31", "9890.16", "9897.26", 
"9904.24", "9911.07", "9917.06", "9939.03", "9939.07", "9967.07", 
"9973.06", "9988.24", "9995.01"), class = "factor"), Start.Time = c("9/29/2014 10:40:40 PM", 
"9/29/2014 10:49:15 PM", "10/1/2014 11:01:12 PM", "10/1/2014 11:16:18 PM", 
"10/2/2014 12:15:47 AM", "10/2/2014 12:33:12 AM", "10/2/2014 1:13:01 AM", 
"10/2/2014 4:14:15 AM", "10/2/2014 4:23:31 AM", "10/2/2014 4:28:21 AM", 
"10/2/2014 10:00:06 PM", "10/2/2014 10:46:58 PM", "10/2/2014 11:10:36 PM", 
"10/3/2014 12:28:55 AM", "10/3/2014 12:55:06 AM", "10/3/2014 1:10:36 AM", 
"10/3/2014 1:20:41 AM", "10/3/2014 1:30:41 AM", "10/3/2014 1:35:02 AM", 
"10/3/2014 1:42:02 AM", "10/3/2014 2:05:05 AM", "10/3/2014 2:12:30 AM", 
"10/3/2014 2:17:05 AM", "10/3/2014 2:21:36 AM", "10/3/2014 2:28:01 AM", 
"10/3/2014 2:34:52 AM", "10/3/2014 4:01:03 AM", "10/3/2014 4:05:58 AM", 
"10/3/2014 4:18:34 AM", "10/3/2014 4:28:29 AM", "10/3/2014 4:31:50 AM", 
"10/3/2014 4:35:55 AM", "10/3/2014 6:00:15 AM", "10/3/2014 6:29:57 AM", 
"10/3/2014 6:33:37 AM", "10/3/2014 6:46:58 AM", "10/3/2014 7:02:00 AM", 
"10/3/2014 7:11:36 AM", "10/3/2014 7:18:32 AM", "10/3/2014 7:36:38 AM", 
"10/3/2014 8:04:27 AM", "10/3/2014 9:30:15 AM", "10/3/2014 10:16:38 AM", 
"10/3/2014 11:28:14 AM", "10/3/2014 12:13:46 PM", "10/3/2014 1:08:55 PM", 
"10/3/2014 1:12:10 PM", "10/3/2014 2:28:59 PM", "10/3/2014 2:51:51 PM", 
"10/3/2014 3:13:46 PM", "10/3/2014 3:43:47 PM", "10/3/2014 4:05:47 PM", 
"10/3/2014 5:12:46 PM", "10/3/2014 6:02:10 PM", "10/3/2014 6:25:01 PM", 
"10/3/2014 11:19:32 PM", "10/4/2014 9:16:18 AM", "10/4/2014 11:07:55 AM", 
"10/4/2014 11:59:58 AM", "10/4/2014 12:42:29 PM", "10/4/2014 2:00:54 PM", 
"10/4/2014 2:05:44 PM", "10/4/2014 2:09:39 PM", "10/4/2014 2:31:20 PM", 
"10/4/2014 5:20:04 PM", "10/4/2014 6:23:53 PM", "10/4/2014 6:31:39 PM", 
"10/4/2014 6:35:19 PM", "10/4/2014 6:38:40 PM", "10/4/2014 7:04:09 PM", 
"10/4/2014 7:16:35 PM", "10/5/2014 2:51:50 AM", "10/5/2014 3:08:26 AM", 
"10/5/2014 3:15:06 AM", "10/5/2014 3:46:12 AM", "10/5/2014 3:52:58 AM", 
"10/5/2014 4:00:58 AM", "10/5/2014 4:05:54 AM", "10/5/2014 4:27:50 AM", 
"10/5/2014 5:03:22 AM", "10/5/2014 5:09:42 AM", "10/5/2014 5:24:23 AM", 
"10/5/2014 5:35:29 AM", "10/5/2014 5:39:44 AM", "10/5/2014 6:00:40 AM", 
"10/5/2014 6:10:31 AM", "10/5/2014 6:18:22 AM", "10/5/2014 6:26:11 AM", 
"10/5/2014 6:33:52 AM", "10/5/2014 6:54:43 AM", "10/5/2014 7:11:13 AM", 
"10/5/2014 7:15:43 AM", "10/5/2014 8:08:37 AM", "10/5/2014 9:10:24 AM", 
"10/5/2014 9:13:14 AM", "10/5/2014 9:27:19 AM", "10/5/2014 9:40:26 AM", 
"10/5/2014 10:17:48 AM", "10/5/2014 10:51:59 AM", "10/5/2014 10:55:04 AM"
), total.duration = c(355L, 50L, 611L, 3419L, 861L, 2229L, 431L, 
416L, 155L, 235L, 2642L, 1283L, 4524L, 1360L, 775L, 405L, 20L, 
26L, 190L, 976L, 166L, 136L, 60L, 145L, 41L, 80L, 146L, 380L, 
201L, 41L, 80L, 461L, 752L, 45L, 670L, 85L, 426L, 286L, 935L, 
1256L, 4882L, 2644L, 4111L, 2212L, 256L, 50L, 720L, 1192L, 1085L, 
1515L, 931L, 3759L, 1851L, 1201L, 840L, 2397L, 6528L, 2993L, 
2421L, 3597L, 35L, 35L, 6L, 1327L, 246L, 221L, 65L, 25L, 830L, 
596L, 831L, 310L, 245L, 1696L, 100L, 336L, 85L, 1181L, 1847L, 
170L, 586L, 355L, 45L, 866L, 371L, 310L, 294L, 271L, 245L, 190L, 
26L, 3004L, 3517L, 35L, 706L, 641L, 2112L, 1892L, 6L, 71L), site = structure(c(4L, 
4L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L), .Label = c("CLRS", "CVP1", 
"GL1", "IC1", "IC2", "IC3", "ORN1", "ORN2", "ORS1", "ORS3", "RGD1", 
"RGU1", "WC1", "WC2", "WC3"), class = "factor"), number.Of.Pings = c(15L, 
4L, 25L, 513L, 163L, 368L, 27L, 16L, 10L, 14L, 214L, 167L, 566L, 
175L, 146L, 13L, 5L, 7L, 13L, 82L, 17L, 10L, 7L, 8L, 3L, 15L, 
10L, 32L, 10L, 4L, 8L, 47L, 44L, 8L, 75L, 10L, 20L, 31L, 47L, 
266L, 623L, 398L, 480L, 305L, 19L, 10L, 23L, 71L, 90L, 110L, 
108L, 797L, 167L, 105L, 118L, 211L, 773L, 368L, 455L, 729L, 8L, 
11L, 3L, 59L, 20L, 8L, 2L, 5L, 33L, 24L, 68L, 20L, 14L, 118L, 
2L, 19L, 12L, 85L, 117L, 8L, 33L, 13L, 9L, 85L, 42L, 19L, 11L, 
20L, 25L, 10L, 4L, 500L, 703L, 2L, 124L, 101L, 449L, 401L, 4L, 
9L), species = c("Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass", "Striped Bass", "Striped Bass", "Striped Bass", 
"Striped Bass"), StartDateTime_UTC = structure(c(1412030440, 
1412030955, 1412204472, 1412205378, 1412208947, 1412209992, 1412212381, 
1412223255, 1412223811, 1412224101, 1412287206, 1412290018, 1412291436, 
1412296135, 1412297706, 1412298636, 1412299241, 1412299841, 1412300102, 
1412300522, 1412301905, 1412302350, 1412302625, 1412302896, 1412303281, 
1412303692, 1412308863, 1412309158, 1412309914, 1412310509, 1412310710, 
1412310955, 1412316015, 1412317797, 1412318017, 1412318818, 1412319720, 
1412320296, 1412320712, 1412321798, 1412323467, 1412328615, 1412331398, 
1412335694, 1412338426, 1412341735, 1412341930, 1412346539, 1412347911, 
1412349226, 1412351027, 1412352347, 1412356366, 1412359330, 1412360701, 
1412378372, 1412414178, 1412420875, 1412423998, 1412426549, 1412431254, 
1412431544, 1412431779, 1412433080, 1412443204, 1412447033, 1412447499, 
1412447719, 1412447920, 1412449449, 1412450195, 1412477510, 1412478506, 
1412478906, 1412480772, 1412481178, 1412481658, 1412481954, 1412483270, 
1412485402, 1412485782, 1412486663, 1412487329, 1412487584, 1412488840, 
1412489431, 1412489902, 1412490371, 1412490832, 1412492083, 1412493073, 
1412493343, 1412496517, 1412500224, 1412500394, 1412501239, 1412502026, 
1412504268, 1412506319, 1412506504), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), Duration_sec = new("Period", .Data = c(355, 
50, 611, 3419, 861, 2229, 431, 416, 155, 235, 2642, 1283, 4524, 
1360, 775, 405, 20, 26, 190, 976, 166, 136, 60, 145, 41, 80, 
146, 380, 201, 41, 80, 461, 752, 45, 670, 85, 426, 286, 935, 
1256, 4882, 2644, 4111, 2212, 256, 50, 720, 1192, 1085, 1515, 
931, 3759, 1851, 1201, 840, 2397, 6528, 2993, 2421, 3597, 35, 
35, 6, 1327, 246, 221, 65, 25, 830, 596, 831, 310, 245, 1696, 
100, 336, 85, 1181, 1847, 170, 586, 355, 45, 866, 371, 310, 294, 
271, 245, 190, 26, 3004, 3517, 35, 706, 641, 2112, 1892, 6, 71
), year = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 
    month = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0), day = c(0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), hour = c(0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0), minute = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), EndDateTime_UTC = structure(c(1412030795, 
1412031005, 1412205083, 1412208797, 1412209808, 1412212221, 1412212812, 
1412223671, 1412223966, 1412224336, 1412289848, 1412291301, 1412295960, 
1412297495, 1412298481, 1412299041, 1412299261, 1412299867, 1412300292, 
1412301498, 1412302071, 1412302486, 1412302685, 1412303041, 1412303322, 
1412303772, 1412309009, 1412309538, 1412310115, 1412310550, 1412310790, 
1412311416, 1412316767, 1412317842, 1412318687, 1412318903, 1412320146, 
1412320582, 1412321647, 1412323054, 1412328349, 1412331259, 1412335509, 
1412337906, 1412338682, 1412341785, 1412342650, 1412347731, 1412348996, 
1412350741, 1412351958, 1412356106, 1412358217, 1412360531, 1412361541, 
1412380769, 1412420706, 1412423868, 1412426419, 1412430146, 1412431289, 
1412431579, 1412431785, 1412434407, 1412443450, 1412447254, 1412447564, 
1412447744, 1412448750, 1412450045, 1412451026, 1412477820, 1412478751, 
1412480602, 1412480872, 1412481514, 1412481743, 1412483135, 1412485117, 
1412485572, 1412486368, 1412487018, 1412487374, 1412488450, 1412489211, 
1412489741, 1412490196, 1412490642, 1412491077, 1412492273, 1412493099, 
1412496347, 1412500034, 1412500259, 1412501100, 1412501880, 1412504138, 
1412506160, 1412506325, 1412506575), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), StartOpen = c(FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), EndOpen = c(FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
), location = c("IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", "IN", 
"IN", "IN", "IN", "IN")), row.names = c(NA, -100L), class = c("tbl_df", 
"tbl", "data.frame"))

关门间隔

new("Interval", .Data = c(-81060, -117060, -59400, -16200, -76680, 
-51000, -81120), start = structure(c(1412238660, 1412362800, 
1412434800, 1412454600, 1412542980, 1412602200, 1412690400), class = c("POSIXct", 
"POSIXt"), tzone = "UTC"), tzone = "UTC")

【问题讨论】:

  • 您能否提供一个示例来说明您正在寻找的输出内容(可以是虚拟数据),但格式会有所帮助。当我运行您的示例数据代码时,我还收到错误“getClass(Class, where = topenv(parent.frame())) 中的错误:“Period”不是定义的类”。也许将其剥离以使其更小
  • 听起来您可以使用数据库连接方法将观察数据与区间数据连接起来。这假设它们位于两个单独的表中。
  • @BrianFisher 我已经更新了问题并修复了 gate_closed 期间的 dput
  • 我认为您应该能够使用 which(Detections$StartDateTime_UTC %in% Interval) 之类的东西来获取索引,然后您可以将其转换为 ID。我无法测试它,因为您提供的两组数据不重叠(时间间隔都在 2013 年 3 月/4 月,而检测都在 2014 年 9 月/10 月)
  • @BrianFisher 这就是我尝试对数据进行子集化的结果。不幸的是,它只返回整数 0。我会尝试为那个人获得正确的间隔

标签: r date intervals lubridate


【解决方案1】:

因此,您的示例数据存在一些问题,导致难以回答您的问题。

  1. 您的示例检测数据包含许多额外信息,这些信息不需要解决或理解您的问题。
  2. 您的示例间隔是向后的。 (他们在开始之前就结束了)
  3. 您的示例数据没有以易于使用的格式设置(您没有包含读取它所需的包)。

也就是说,让我们简化并纠正这些问题:

library(tidyverse)  # needed because your data is in tibble format
library(lubridate)  # needed for time interval class used in your example

# I called your example data "Detections" and "Intervals", not importing them here

set.seed(914)
row.sample <- c(1,5,2, sample(1:100, 10)) # to include the samples not in the given intervals mixed with good values
use.cols <- c(1,4,6,7,9)  
Detections.use <- Detections[row.sample, use.cols]

Detections.use
# A tibble: 13 x 5
   Tag     site  species      StartDateTime_UTC   EndDateTime_UTC    
   <fct>   <fct> <chr>        <dttm>              <dttm>             
 1 5004.24 IC1   Striped Bass 2014-09-29 22:40:40 2014-09-29 22:46:35
 2 5004.24 RGD1  Striped Bass 2014-10-02 00:15:47 2014-10-02 00:30:08
 3 5004.24 IC1   Striped Bass 2014-09-29 22:49:15 2014-09-29 22:50:05
 4 5004.24 RGD1  Striped Bass 2014-10-04 18:38:40 2014-10-04 18:52:30
 5 5004.24 RGD1  Striped Bass 2014-10-05 07:15:43 2014-10-05 08:05:47
 6 5004.24 RGD1  Striped Bass 2014-10-03 02:21:36 2014-10-03 02:24:01
 7 5004.24 RGD1  Striped Bass 2014-10-03 12:13:46 2014-10-03 12:18:02
 8 5004.24 RGD1  Striped Bass 2014-10-03 09:30:15 2014-10-03 10:14:19
 9 5004.24 RGD1  Striped Bass 2014-10-04 14:09:39 2014-10-04 14:09:45
10 5004.24 RGD1  Striped Bass 2014-10-03 02:17:05 2014-10-03 02:18:05
11 5004.24 RGD1  Striped Bass 2014-10-05 03:08:26 2014-10-05 03:12:31
12 5004.24 RGD1  Striped Bass 2014-10-03 01:42:02 2014-10-03 01:58:18
13 5004.24 RGD1  Striped Bass 2014-10-02 00:33:12 2014-10-02 01:10:21


# Convert your intervals to a table, then correct them to make them positive time intevals
Interval.table <- tibble(Intervals, "ID" = seq(from = 1, to = length(Intervals))) %>%
      mutate(end_time = Intervals$start,
             start_time = end_time+Intervals$.Data,
             new_Interval = start_time %--% end_time) %>%
      select(ID, new_Interval)
Interval.table
# A tibble: 7 x 2
     ID new_Interval                                    
  <int> <Interval>                                      
1     1 2014-10-01 10:00:00 UTC--2014-10-02 08:31:00 UTC
2     2 2014-10-02 10:29:00 UTC--2014-10-03 19:00:00 UTC
3     3 2014-10-03 22:30:00 UTC--2014-10-04 15:00:00 UTC
4     4 2014-10-04 16:00:00 UTC--2014-10-04 20:30:00 UTC
5     5 2014-10-04 23:45:00 UTC--2014-10-05 21:03:00 UTC
6     6 2014-10-05 23:20:00 UTC--2014-10-06 13:30:00 UTC
7     7 2014-10-06 15:28:00 UTC--2014-10-07 14:00:00 UTC

现在解决您的问题 lubridate 包包含一个函数%within%,用于测试时间是否在时间间隔内,但奇怪的是,对于 tidyverse 函数,它似乎不能很好地向量化。我无法弄清楚如何让它在典型的 dplyr/tidyr 语法中工作,但是使用 for 循环,我们可以制作一个向量,其中包含每次适合的间隔的 ID 和 NA不在任何给定的内音中。

y <- c()
for (i in 1:length(Detections.use$StartDateTime_UTC)){
z<- which(Detections.use$StartDateTime_UTC[i] %within% Interval.table$new_Interval)
y[i] <- ifelse(isTRUE(z>0), z, NA)
}
Detections.use$Interval <- y
Detections.use
# A tibble: 13 x 6
   Tag     site  species      StartDateTime_UTC   EndDateTime_UTC     Interval
   <fct>   <fct> <chr>        <dttm>              <dttm>                 <int>
 1 5004.24 IC1   Striped Bass 2014-09-29 22:40:40 2014-09-29 22:46:35       NA
 2 5004.24 RGD1  Striped Bass 2014-10-02 00:15:47 2014-10-02 00:30:08        1
 3 5004.24 IC1   Striped Bass 2014-09-29 22:49:15 2014-09-29 22:50:05       NA
 4 5004.24 RGD1  Striped Bass 2014-10-04 18:38:40 2014-10-04 18:52:30        4
 5 5004.24 RGD1  Striped Bass 2014-10-05 07:15:43 2014-10-05 08:05:47        5
 6 5004.24 RGD1  Striped Bass 2014-10-03 02:21:36 2014-10-03 02:24:01        2
 7 5004.24 RGD1  Striped Bass 2014-10-03 12:13:46 2014-10-03 12:18:02        2
 8 5004.24 RGD1  Striped Bass 2014-10-03 09:30:15 2014-10-03 10:14:19        2
 9 5004.24 RGD1  Striped Bass 2014-10-04 14:09:39 2014-10-04 14:09:45        3
10 5004.24 RGD1  Striped Bass 2014-10-03 02:17:05 2014-10-03 02:18:05        2
11 5004.24 RGD1  Striped Bass 2014-10-05 03:08:26 2014-10-05 03:12:31        5
12 5004.24 RGD1  Striped Bass 2014-10-03 01:42:02 2014-10-03 01:58:18        2
13 5004.24 RGD1  Striped Bass 2014-10-02 00:33:12 2014-10-02 01:10:21        1

编辑添加sapply解决方案---

这也可以通过sapply 更平滑一点来完成,并且不会留下工件:

which.join <- function(x, y) {
      z <- which(x %within% y)
      z <- ifelse(isTRUE(z > 0), z, NA)
      z
}

Detections.use$Interval <- sapply(Detections.use$StartDateTime_UTC, 
                             function(x) which.join(x,Interval.table$new_Interval)

另一种方法可能是使用如here 所示的fuzzyjoin 包

【讨论】:

  • 这与我想出的答案相当接近:for (i in 1:length(dat_overlap$StartDateTime_UTC)) { tryCatch({ dat_overlap$interval.id[i] &lt;- which(dat_overlap$StartDateTime_UTC[i] %within% ops_tib) }, error = function(e){}) } 我为我的格式和问题道歉。我对在堆栈溢出中进行通信还是比较陌生。我将减少我的数据集以使其更直接并添加到我的包中。
猜你喜欢
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多