Подмножество и свернуть строки на основе числа

#r #data.table #tidyverse

#r #данные.таблица #аккуратная вселенная

Вопрос:

Я застрял на проблеме, которую, на мой взгляд, должно быть довольно легко решить. Однако я не могу найти решение.

У меня есть фрейм данных, содержащий временные ряды, и я хочу подмножить только определенные строки. Я создал фиктивный набор данных:

     structure(list(ID = c("A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", 
"A2"), Time = structure(c(1611925200, 1611925201, 1611925202, 
1611925203, 1611925204, 1611925205, 1611925206, 1611925207, 1611925208, 
1611925209, 1611925210, 1611925211, 1611925212, 1611925213, 1611925214, 
1611925215, 1611925216, 1611925217, 1611925218, 1611925219, 1611925220, 
1611925221, 1611925222, 1611925223, 1611925224, 1611925225, 1611925226, 
1611925227, 1611925228, 1611925229, 1611925230, 1611925231, 1611925232, 
1611925233, 1611925234, 1611925235, 1611925236, 1611925237, 1611925238, 
1611925239, 1611925240, 1611925241, 1611925242, 1611925243, 1611925244, 
1611925245, 1611925246, 1611925247, 1611925248, 1611925249, 1611925250, 
1611925251, 1611925252, 1611925253, 1611925254, 1611925255, 1611925256, 
1611925257, 1611925258, 1611925259, 1611925260, 1611925261, 1611925262, 
1611925263, 1611925264, 1611925265, 1611925266, 1611925267, 1611925268, 
1611925269, 1611925270, 1611925271, 1611925272, 1611925273, 1611925274, 
1611925275, 1611925276, 1611925277, 1611925278, 1611925279, 1611925280, 
1611925281, 1611925282, 1611925283, 1611925284, 1611925285, 1611925286, 
1611925287, 1611925288, 1611925289, 1611925290, 1611925291, 1611925292, 
1611925293, 1611925294, 1611925295, 1611925296, 1611925297, 1611925298, 
1611925299, 1611925300, 1611925301, 1611925302, 1611925303, 1611925304, 
1611925305, 1611925306, 1611925307, 1611925308, 1611925309, 1611925310, 
1611925311, 1611925312, 1611925313, 1611925314, 1611925315, 1611925316, 
1611925317, 1611925318, 1611925319, 1611925320, 1611925321, 1611925322, 
1611925323, 1611925324, 1611925325, 1611925326, 1611925327, 1611925328, 
1611925329, 1611925330, 1611925331, 1611925332, 1611925333, 1611925334, 
1611925335, 1611925336, 1611925337, 1611925338, 1611925339, 1611925340, 
1611925341, 1611925342, 1611925343, 1611925344, 1611925345, 1611925346, 
1611925347, 1611925348, 1611925349, 1611925350, 1611925351, 1611925352, 
1611925353, 1611925354, 1611925355, 1611925356, 1611925357, 1611925358, 
1611925359, 1611925360, 1611925361, 1611925362, 1611925363, 1611925364, 
1611925365, 1611925366, 1611925367, 1611925368, 1611925369, 1611925370, 
1611925371, 1611925372, 1611925373, 1611925374, 1611925375, 1611925376, 
1611925377, 1611925378, 1611925379, 1611925380, 1611925381, 1611925382, 
1611925383, 1611925384, 1611925385, 1611925386, 1611925387, 1611925388, 
1611925389, 1611925390, 1611925391, 1611925392, 1611925393, 1611925394, 
1611925395, 1611925396, 1611925397, 1611925398, 1611925399, 1611925400, 
1611925401, 1611925402, 1611925403, 1611925404, 1611925405, 1611925406, 
1611925407, 1611925408, 1611925409, 1611925410, 1611925411, 1611925412, 
1611925413, 1611925414, 1611925415, 1611925416, 1611925417, 1611925418, 
1611925419, 1611925420, 1611925421, 1611925422, 1611925423, 1611925424, 
1611925425, 1611925426, 1611925427, 1611925428, 1611925429, 1611925430, 
1611925431, 1611925432, 1611925433, 1611925434, 1611925435, 1611925436, 
1611925437, 1611925438, 1611925439, 1611925440, 1611925441, 1611925442, 
1611925443, 1611925444, 1611925445, 1611925446, 1611925447, 1611925448, 
1611925449, 1611925450, 1611925451, 1611925452, 1611925453, 1611925454, 
1611925455, 1611925456, 1611925457, 1611925458, 1611925459, 1611925460, 
1611925461, 1611925462, 1611925463, 1611925464, 1611925465, 1611925466, 
1611925467, 1611925468, 1611925469, 1611925470, 1611925471, 1611925472, 
1611925473, 1611925474, 1611925475, 1611925476, 1611925477, 1611925478, 
1611925479, 1611925480, 1611925481, 1611925482, 1611925483, 1611925484, 
1611925485, 1611925486, 1611925487, 1611925488, 1611925489, 1611925490, 
1611925491, 1611925492, 1611925493, 1611925494, 1611925495, 1611925496, 
1611925497, 1611925498, 1611925499, 1611925500, 1611925200, 1611925201, 
1611925202, 1611925203, 1611925204, 1611925205, 1611925206, 1611925207, 
1611925208, 1611925209, 1611925210, 1611925211, 1611925212, 1611925213, 
1611925214, 1611925215, 1611925216, 1611925217, 1611925218, 1611925219, 
1611925220, 1611925221, 1611925222, 1611925223, 1611925224, 1611925225, 
1611925226, 1611925227, 1611925228, 1611925229, 1611925230, 1611925231, 
1611925232, 1611925233, 1611925234, 1611925235, 1611925236, 1611925237, 
1611925238, 1611925239, 1611925240, 1611925241, 1611925242, 1611925243, 
1611925244, 1611925245, 1611925246, 1611925247, 1611925248, 1611925249, 
1611925250, 1611925251, 1611925252, 1611925253, 1611925254, 1611925255, 
1611925256, 1611925257, 1611925258, 1611925259, 1611925260, 1611925261, 
1611925262, 1611925263, 1611925264, 1611925265, 1611925266, 1611925267, 
1611925268, 1611925269, 1611925270, 1611925271, 1611925272, 1611925273, 
1611925274, 1611925275, 1611925276, 1611925277, 1611925278, 1611925279, 
1611925280, 1611925281, 1611925282, 1611925283, 1611925284, 1611925285, 
1611925286, 1611925287, 1611925288, 1611925289, 1611925290, 1611925291, 
1611925292, 1611925293, 1611925294, 1611925295, 1611925296, 1611925297, 
1611925298, 1611925299, 1611925300, 1611925301, 1611925302, 1611925303, 
1611925304, 1611925305, 1611925306, 1611925307, 1611925308, 1611925309, 
1611925310, 1611925311, 1611925312, 1611925313, 1611925314, 1611925315, 
1611925316, 1611925317, 1611925318, 1611925319, 1611925320, 1611925321, 
1611925322, 1611925323, 1611925324, 1611925325, 1611925326, 1611925327, 
1611925328, 1611925329, 1611925330, 1611925331, 1611925332, 1611925333, 
1611925334, 1611925335, 1611925336, 1611925337, 1611925338, 1611925339, 
1611925340, 1611925341, 1611925342, 1611925343, 1611925344, 1611925345, 
1611925346, 1611925347, 1611925348, 1611925349, 1611925350, 1611925351, 
1611925352, 1611925353, 1611925354, 1611925355, 1611925356, 1611925357, 
1611925358, 1611925359, 1611925360, 1611925361, 1611925362, 1611925363, 
1611925364, 1611925365, 1611925366, 1611925367, 1611925368, 1611925369, 
1611925370, 1611925371, 1611925372, 1611925373, 1611925374, 1611925375, 
1611925376, 1611925377, 1611925378, 1611925379, 1611925380, 1611925381, 
1611925382, 1611925383, 1611925384, 1611925385, 1611925386, 1611925387, 
1611925388, 1611925389, 1611925390, 1611925391, 1611925392, 1611925393, 
1611925394, 1611925395, 1611925396, 1611925397, 1611925398, 1611925399, 
1611925400, 1611925401, 1611925402, 1611925403, 1611925404, 1611925405, 
1611925406, 1611925407, 1611925408, 1611925409, 1611925410, 1611925411, 
1611925412, 1611925413, 1611925414, 1611925415, 1611925416, 1611925417, 
1611925418, 1611925419, 1611925420, 1611925421, 1611925422, 1611925423, 
1611925424, 1611925425, 1611925426, 1611925427, 1611925428, 1611925429, 
1611925430, 1611925431, 1611925432, 1611925433, 1611925434, 1611925435, 
1611925436, 1611925437, 1611925438, 1611925439, 1611925440, 1611925441, 
1611925442, 1611925443, 1611925444, 1611925445, 1611925446, 1611925447, 
1611925448, 1611925449, 1611925450, 1611925451, 1611925452, 1611925453, 
1611925454, 1611925455, 1611925456, 1611925457, 1611925458, 1611925459, 
1611925460, 1611925461, 1611925462, 1611925463, 1611925464, 1611925465, 
1611925466, 1611925467, 1611925468, 1611925469, 1611925470, 1611925471, 
1611925472, 1611925473, 1611925474, 1611925475, 1611925476, 1611925477, 
1611925478, 1611925479, 1611925480, 1611925481, 1611925482, 1611925483, 
1611925484, 1611925485, 1611925486, 1611925487, 1611925488, 1611925489, 
1611925490, 1611925491, 1611925492, 1611925493, 1611925494, 1611925495, 
1611925496, 1611925497, 1611925498, 1611925499, 1611925500), class = c("POSIXct", 
"POSIXt"), tzone = ""), Seq = c(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 
58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 
74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 
90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 
105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 
118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 
131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 
144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 
157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 
170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 
183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 
196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 
209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 
222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 
235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 
248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 
261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 
274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 
287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 
300, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 
97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 
110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 
123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 
136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 
149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 
162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 
175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 
188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 
214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 
227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 
240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 
253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 
266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 
279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 
292, 293, 294, 295, 296, 297, 298, 299, 300), Value = c(0, 1, 
1, 0, 2, 1, 1, 0, 0, 1, 0, 1, 0, 2, 1, 2, 1, 1, 0, 0, 1, 0, 1, 
2, 2, 0, 1, 2, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 2, 
1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 
1, 0, 0, 2, 1, 1, 0, 1, 0, 1, 2, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 
1, 2, 1, 0, 1, 1, 2, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 2, 2, 2, 
0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 2, 0, 1, 1, 1, 1, 1, 0, 2, 
0, 1, 0, 1, 0, 2, 0, 1, 1, 1, 1, 1, 2, 1, 1, 0, 2, 1, 1, 1, 0, 
1, 0, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 
2, 1, 1, 1, 0, 2, 2, 1, 2, 1, 2, 0, 1, 1, 1, 0, 2, 2, 2, 0, 0, 
2, 1, 0, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 2, 0, 1, 2, 
2, 1, 1, 1, 2, 2, 1, 1, 2, 1, 1, 1, 0, 1, 2, 0, 0, 1, 1, 1, 2, 
2, 1, 2, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 2, 0, 0, 2, 2, 2, 
1, 1, 1, 2, 0, 1, 2, 0, 1, 2, 0, 0, 1, 1, 1, 1, 2, 2, 1, 1, 1, 
1, 0, 1, 1, 0, 2, 1, 1, 2, 2, 0, 1, 2, 1, 1, 1, 0, 1, 1, 0, 1, 
1, 0, 0, 1, 0, 2, 1, 1, 0, 0, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 
2, 2, 2, 2, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 2, 1, 2, 2, 
1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 
0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 2, 2, 0, 1, 2, 1, 0, 0, 1, 0, 
2, 1, 1, 2, 1, 1, 1, 2, 1, 1, 0, 1, 1, 1, 1, 2, 1, 1, 0, 0, 0, 
1, 0, 1, 1, 2, 0, 2, 0, 1, 1, 1, 2, 1, 2, 2, 1, 0, 1, 0, 1, 1, 
1, 1, 2, 1, 2, 0, 0, 1, 1, 1, 2, 1, 0, 2, 0, 2, 1, 0, 2, 2, 0, 
1, 2, 1, 2, 0, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 2, 1, 
2, 2, 1, 0, 0, 2, 1, 1, 0, 2, 1, 1, 2, 1, 1, 2, 2, 1, 1, 2, 2, 
2, 2, 2, 0, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 0, 2, 2, 2, 1, 2, 0, 
2, 0, 0, 2, 2, 2, 2, 0, 2, 1, 1, 1, 0, 1, 1, 0, 0, 2, 1, 2, 1, 
1, 2, 1, 0, 1, 1, 2, 1, 1, 0, 1, 0, 0, 0, 2, 1, 0, 2, 2, 2, 1, 
0, 1, 1, 1, 2, 2, 1, 0, 1, 0, 0, 1, 2, 0, 0, 0, 1, 0, 1, 1, 0, 
2, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 2, 1, 1, 0, 1, 1, 1, 
1, 1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 0), toTake = c("3", "no", "no", 
"no", "no", "no", "no", "no", "no", "no", "0", "no", "no", "no", 
"no", "no", "no", "no", "no", "no", "2", "no", "no", "no", "no", 
"no", "no", "no", "no", "no", "2", "no", "no", "no", "no", "no", 
"no", "no", "no", "no", "1", "no", "no", "no", "no", "no", "no", 
"no", "no", "no", "4", "no", "no", "no", "no", "no", "no", "no", 
"no", "no", "2", "no", "no", "no", "no", "no", "no", "no", "no", 
"no", "0", "no", "no", "no", "no", "no", "no", "no", "no", "no", 
"2", "no", "no", "no", "no", "no", "no", "no", "no", "no", "3", 
"no", "no", "no", "no", "no", "no", "no", "no", "no", "2", "no", 
"no", "no", "no", "no", "no", "no", "no", "no", "1", "no", "no", 
"no", "no", "no", "no", "no", "no", "no", "2", "no", "no", "no", 
"no", "no", "no", "no", "no", "no", "3", "no", "no", "no", "no", 
"no", "no", "no", "no", "no", "1", "no", "no", "no", "no", "no", 
"no", "no", "no", "no", "1", "no", "no", "no", "no", "no", "no", 
"no", "no", "no", "3", "no", "no", "no", "no", "no", "no", "no", 
"no", "no", "1", "no", "no", "no", "no", "no", "no", "no", "no", 
"no", "1", "no", "no", "no", "no", "no", "no", "no", "no", "no", 
"1", "no", "no", "no", "no", "no", "no", "no", "no", "no", "1", 
"no", "no", "no", "no", "no", "no", "no", "no", "no", "4", "no", 
"no", "no", "no", "no", "no", "no", "no", "no", "0", "no", "no", 
"no", "no", "no", "no", "no", "no", "no", "3", "no", "no", "no", 
"no", "no", "no", "no", "no", "no", "3", "no", "no", "no", "no", 
"no", "no", "no", "no", "no", "1", "no", "no", "no", "no", "no", 
"no", "no", "no", "no", "1", "no", "no", "no", "no", "no", "no", 
"no", "no", "no", "2", "no", "no", "no", "no", "no", "no", "no", 
"no", "no", "2", "no", "no", "no", "no", "no", "no", "no", "no", 
"no", "1", "no", "no", "no", "no", "no", "no", "no", "no", "no", 
"0", "1", "no", "no", "no", "no", "no", "no", "no", "no", "no", 
"2", "no", "no", "no", "no", "no", "no", "no", "no", "no", "1", 
"no", "no", "no", "no", "no", "no", "no", "no", "no", "3", "no", 
"no", "no", "no", "no", "no", "no", "no", "no", "0", "no", "no", 
"no", "no", "no", "no", "no", "no", "no", "0", "no", "no", "no", 
"no", "no", "no", "no", "no", "no", "0", "no", "no", "no", "no", 
"no", "no", "no", "no", "no", "3", "no", "no", "no", "no", "no", 
"no", "no", "no", "no", "2", "no", "no", "no", "no", "no", "no", 
"no", "no", "no", "3", "no", "no", "no", "no", "no", "no", "no", 
"no", "no", "2", "no", "no", "no", "no", "no", "no", "no", "no", 
"no", "1", "no", "no", "no", "no", "no", "no", "no", "no", "no", 
"3", "no", "no", "no", "no", "no", "no", "no", "no", "no", "2", 
"no", "no", "no", "no", "no", "no", "no", "no", "no", "2", "no", 
"no", "no", "no", "no", "no", "no", "no", "no", "1", "no", "no", 
"no", "no", "no", "no", "no", "no", "no", "2", "no", "no", "no", 
"no", "no", "no", "no", "no", "no", "0", "no", "no", "no", "no", 
"no", "no", "no", "no", "no", "4", "no", "no", "no", "no", "no", 
"no", "no", "no", "no", "4", "no", "no", "no", "no", "no", "no", 
"no", "no", "no", "3", "no", "no", "no", "no", "no", "no", "no", 
"no", "no", "1", "no", "no", "no", "no", "no", "no", "no", "no", 
"no", "3", "no", "no", "no", "no", "no", "no", "no", "no", "no", 
"2", "no", "no", "no", "no", "no", "no", "no", "no", "no", "0", 
"no", "no", "no", "no", "no", "no", "no", "no", "no", "1", "no", 
"no", "no", "no", "no", "no", "no", "no", "no", "0", "no", "no", 
"no", "no", "no", "no", "no", "no", "no", "4", "no", "no", "no", 
"no", "no", "no", "no", "no", "no", "1", "no", "no", "no", "no", 
"no", "no", "no", "no", "no", "1", "no", "no", "no", "no", "no", 
"no", "no", "no", "no", "1")), row.names = c(NA, -602L), class = "data.frame")
 

Что мне нужно сделать, это:

  • Для каждой группы выберите только те строки, которым присвоен номер в столбце «toTake» (ссылка)
  • Для каждой из этих строк выберите n количество строк выше и ниже (отставание и опережение), обозначенное числом в столбце «toTake». Это условно: когда 0, выберите только ссылочную строку. При значении 1 выберите только строку выше. Когда 2, выберите одну строку выше и одну строку ниже. Когда 3, выберите 2 строки выше и 1 строку ниже. Когда 4, выберите 2 строки ниже и 2 строки выше. Для первой строки для каждой группы я буду следовать тому же правилу, не рассматривая приведенные выше строки (поскольку они не существуют).
  • Сверните эти строки в одну, сохраняя время, указанное в справочной строке, и суммируя переменные, указанные в столбце «значение».

РЕДАКТИРОВАТЬ: это пример ожидаемого результата. Это должно быть сделано для всех групп (у меня их много в моем исходном наборе данных) и всех ссылочных строк. Я выбрал только несколько, чтобы получить более обширный результат (т. Е. Я перескочил с 00:00: 50 на 00: 01:30).

 structure(list(ID = c("A1", "A1", "A1", "A1", "A1", "A1", "A1"
), Value = c(1, 0, 1, 1, 1, 3, 3), Time = structure(c(1611925200, 
1611925210, 1611925220, 1611925230, 1611925240, 1611925250, 1611925290
), class = c("POSIXct", "POSIXt"), tzone = "")), row.names = c(NA, 
-7L), class = "data.frame")
 

Я думаю, что мне следует создать группирующую переменную для каждой из этих строк, а затем использовать summarise функцию для их объединения. Однако я никак не могу собраться с мыслями, чтобы решить эту проблему.
Любая помощь будет принята с благодарностью!

Ответ №1:

Вот один из способов (с dt вашим набором данных):

 library(data.table)
setDT(dt)

dt[, cs := cumsum(Value), ID]
gdt <- dt[toTake != 'no', .(ID, Time, Seq, toTake = as.integer(toTake))]
gdt[, `:=`(
  from = pmax(0, Seq - toTake   toTake %/% 2),
  to = pmin(300, Seq   toTake %/% 2)
  )]
gdt[, Value := dt[gdt, cs, on = c('ID', 'Seq' = 'to')] - 
    dt[gdt, cs - Value, on = c('ID', 'Seq' = 'from')]]
gdt[1:10]

#>     ID                Time Seq toTake from to Value
#>  1: A1 2021-01-29 13:00:00   0      3    0  1     1
#>  2: A1 2021-01-29 13:00:10  10      0   10 10     0
#>  3: A1 2021-01-29 13:00:20  20      2   19 21     1
#>  4: A1 2021-01-29 13:00:30  30      2   29 31     1
#>  5: A1 2021-01-29 13:00:40  40      1   39 40     1
#>  6: A1 2021-01-29 13:00:50  50      4   48 52     3
#>  7: A1 2021-01-29 13:01:00  60      2   59 61     2
#>  8: A1 2021-01-29 13:01:10  70      0   70 70     1
#>  9: A1 2021-01-29 13:01:20  80      2   79 81     4
#> 10: A1 2021-01-29 13:01:30  90      3   88 91     3
 

Возможно, вам потребуется определить максимальное Seq значение для каждой группы и объединить его gdt на более ранней стадии, чтобы в целом выполнить pmin бит правильно.

Комментарии:

1. Вау, большое спасибо! Кажется, это хорошо работает на моем исходном df. Мне просто нужно разъяснение: не могли бы вы объяснить мне, что делает последний бит кода? Я не привык к грамматике data.table, но попытка учиться, поскольку это, кажется, дает гораздо больше свободы, чем tidyverse. Возможно, позже мне придется изменить вычисление на среднее значение (я знаю, что могу просто разделить значение на итоговое значение, но мне бы очень хотелось научиться правильно кодировать. Большое спасибо

2. Он выполняет два аналогичных объединения gdt таблицы с dt одним, чтобы выбрать правильные значения для совокупной суммы из dt таблицы. Разница этих двух совокупных сумм даст вам сумму в указанном вами окне и будет присвоена Value столбцу gdt . Я думаю, вы могли бы сделать это в tidyverse так же легко — вероятно, в соответствии с 1-1 шагов. В данный момент мой мозг просто работает data.table .