r - 将 DateTime 间隔分配给 DateTime 事件
问题描述
我有一个超过 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")
解决方案
因此,您的示例数据存在一些问题,导致难以回答您的问题。
- 您的示例检测数据包含许多额外信息,这些信息不需要解决或理解您的问题。
- 您的示例间隔是向后的。(他们在开始之前结束)
- 您的示例数据没有以易于使用的格式设置(您不包括阅读它所需的包)。
也就是说,让我们简化并纠正这些问题:
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不在任何给定的interals之内。
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)
推荐阅读
- python - 使用 Range-Elasticsearch 过滤
- r - ShinyProxy Euler App 未运行 - 无法启动容器
- python - 使用 Scikit-Learn 和 Python 将评论分类为正面和负面
- php - 我需要知道如何制作相关的国家和城市数组
- javascript - 如何动态加载路由计算?
- c++ - C++:解码一个经过 Base64 编码和 UTF-8 解码的 HTTP 响应
- android-studio - 动画选择器导致视图初始化崩溃
- python - 如何在没有循环的情况下找到给定经度和纬度的两点之间的距离?
- javascript - Chart.js 如何格式化属于特定轴的数据集(我有两个 yAxes)
- android - 我的底部导航栏只有在我双击切换片段时才有效