首页 > 解决方案 > R - 根据条件启动和重置 R 中的计数列

问题描述

我要提前感谢所有帮助,因为到目前为止的帮助使我能够获得关于如何分析我的数据的新想法/假设。

数据

structure(list(record_id = c(110101, 110101, 110101, 110101, 
110101, 110101, 110101, 110101, 110101, 110101, 110101, 110101, 
110101, 110101, 110101, 110101, 110101, 110101, 110101, 110101, 
110101, 110101, 110101, 110101, 110101, 110101, 110101, 110101, 
110101, 110101, 110101, 110101, 110101, 110101, 110101, 110101, 
110101, 110101, 110101, 110101, 110101, 110101, 110101, 110101, 
110101, 110101, 110101, 110101, 110101, 110101, 110101, 110101, 
110101, 110101, 110101, 110101, 110101, 110101, 110101, 110101
), start = 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), stop = c(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), `treatment (type)` = c(1, 
1, 1, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 3, 3, 0, 3, 3, 3, 
0, 2, 2, 2, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), vulnerable_period_30count = c(0, 
0, 0, 1, 1, 1, 1, 2, 3, 4, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, 3, 4, 
1, 2, 3, 4, 1, 1, 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, 0, 0), vulnerable_period_yn = c(0, 0, 0, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 0, 0), vulnerable_period_30count_3days = c(0, 
0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 11, 12, 13, 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, 0, 0), vulnerable_period_3days_yn = c(0, 0, 0, 0, 0, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 0, 0)), row.names = c(NA, -60L
), class = c("tbl_df", "tbl", "data.frame"))

解释

输入 startstop是天数。每日治疗列于 中treatment,0 = 不治疗,为中断治疗,1:3 为治疗 A/B/C。

假设是,一旦一个人的治疗中断,他或她在接下来的 30 天内很容易受到伤害。

因此,基于这些输入,我想计算/计算以下输出:

输出

vulnerable_period_30count:发生治疗中断时(治疗(类型)=0),开始计数到30。发生治疗中断时自动复位。

vulnerable_period_30count_3days:仅当治疗中断持续三天(因此连续三个 0)或更长时间时,中断才相关。然后,它会开始计数到 ​​30。如果中断持续时间超过三天,它将重新计数。注意:见第 6 天,中断总共持续 4 天。当 4 天的中断结束时,计数会重置。

当计数超过 30 时,它会恢复为 0,并且只有在再次发生相关中断时才会开始计数。

这里尝试为脆弱_周期_30 计数。

尝试脆弱_period_30count

data$vulnerable_period_30count <- data %>% 
  group_by(record_id, idx = cumsum(`treatment (type)` == 0L)) %>% 
  mutate(counter = row_number()) %>% 
  ungroup %>% 
  select(-idx)
data$test[data$test >30] <- 0

这里的问题是它已经从 1、2、3 开始了。我用最后一行硬停止计数。

对于如何仅在发生三个或更多中断时才开始计数,我完全不知道。

希望你能帮忙

体重

在答案 2 上评论 OP @Ekoam 再次感谢。代码现在运行很好。我设法找到了两个错误。我将用一个案例来说明:

structure(list(record_id = c(110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003), day_count = 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, 301, 302, 303, 304, 305, 306, 307, 
308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 
321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 
334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 
347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 
360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 
373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 
386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 
399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 
412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 
425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 
438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 
451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 
464, 465, 466, 467, 468, 469, 470, 471, 472), day_count_stop = c(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, 301, 302, 303, 304, 305, 306, 307, 
308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 
321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 
334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 
347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 
360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 
373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 
386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 
399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 
412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 
425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 
438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 
451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 
464, 465, 466, 467, 468, 469, 470, 471, 472, 473), oac_class = 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, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 0), vulnerable_period_30count = 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, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 
24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 
37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 
50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 
63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 
76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 
89L, 90L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 
101L, 102L, 103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 
112L, 113L, 114L, 115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 
123L, 124L, 125L, 126L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 
134L, 135L, 136L, 137L, 138L, 139L, 140L, 141L, 142L, 143L, 144L, 
145L, 146L, 147L, 148L, 149L, 150L, 151L, 152L, 153L, 154L, 155L, 
156L, 157L, 158L, 159L, 160L, 161L, 162L, 163L, 164L, 165L, 166L, 
167L, 168L, 169L, 170L, 171L, 172L, 173L, 174L, 175L, 176L, 177L, 
178L, 179L, 180L, 181L, 182L, 183L, 184L, 185L, 186L, 187L, 188L, 
189L, 190L, 191L, 192L, 193L, 194L, 195L, 196L, 197L, 198L, 199L, 
200L, 201L, 202L, 203L, 204L, 205L, 206L, 207L, 208L, 209L, 210L, 
211L, 212L, 213L, 214L, 215L, 216L, 217L, 218L, 219L, 220L, 221L, 
222L, 223L, 224L, 225L, 226L, 227L, 228L, 229L, 230L, 231L, 232L, 
233L, 234L, 235L, 236L, 237L, 238L, 239L, 240L, 241L, 242L, 243L, 
244L, 245L, 246L, 247L, 248L, 249L, 250L, 251L, 252L, 253L, 254L, 
255L, 256L, 257L, 258L, 259L, 260L, 261L, 262L, 263L, 264L, 265L, 
266L, 267L, 268L, 269L, 270L, 271L, 272L, 273L, 274L, 275L, 276L, 
277L, 278L, 279L, 280L, 281L, 282L, 283L, 284L, 285L, 286L, 287L, 
288L, 289L, 290L, 291L, 292L, 293L, 294L, 295L, 296L, 297L, 298L, 
299L, 300L, 301L, 302L, 303L, 304L, 305L, 306L, 307L, 308L, 309L, 
310L, 311L, 312L, 313L, 314L, 315L, 316L, 317L, 318L, 319L, 320L, 
321L, 322L, 323L, 324L, 325L, 326L, 327L, 328L, 329L, 330L, 331L, 
332L, 333L, 334L, 335L, 336L, 337L, 338L, 339L, 340L, 341L, 342L, 
343L, 344L, 345L, 346L, 347L, 348L, 349L, 350L, 351L, 352L, 353L, 
354L, 355L, 356L, 357L, 358L, 359L, 360L, 361L, 362L, 363L, 364L, 
365L, 366L, 367L, 368L, 369L, 370L, 371L, 372L, 373L, 374L, 375L, 
376L, 377L, 378L, 379L, 380L, 381L, 382L, 383L, 384L, 385L, 386L, 
387L, 388L, 389L, 390L, 391L, 392L, 393L, 394L, 395L, 396L, 397L, 
398L, 399L, 400L, 401L, 402L, 403L, 404L, 405L, 406L, 407L, 408L, 
409L, 410L, 411L, 412L, 413L, 414L, 415L, 416L, 417L, 418L, 419L, 
420L, 421L, 422L, 423L, 424L, 425L, 426L, 427L, 428L, 429L, 430L, 
431L, 432L, 433L, 434L, 1L), vulnerable_period_30count_3days = 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, 2L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 
12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 
25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 
38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 
51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 
64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 
77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 89L, 
90L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 101L, 
102L, 103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 112L, 
113L, 114L, 115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L, 
124L, 125L, 126L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 134L, 
135L, 136L, 137L, 138L, 139L, 140L, 141L, 142L, 143L, 144L, 145L, 
146L, 147L, 148L, 149L, 150L, 151L, 152L, 153L, 154L, 155L, 156L, 
157L, 158L, 159L, 160L, 161L, 162L, 163L, 164L, 165L, 166L, 167L, 
168L, 169L, 170L, 171L, 172L, 173L, 174L, 175L, 176L, 177L, 178L, 
179L, 180L, 181L, 182L, 183L, 184L, 185L, 186L, 187L, 188L, 189L, 
190L, 191L, 192L, 193L, 194L, 195L, 196L, 197L, 198L, 199L, 200L, 
201L, 202L, 203L, 204L, 205L, 206L, 207L, 208L, 209L, 210L, 211L, 
212L, 213L, 214L, 215L, 216L, 217L, 218L, 219L, 220L, 221L, 222L, 
223L, 224L, 225L, 226L, 227L, 228L, 229L, 230L, 231L, 232L, 233L, 
234L, 235L, 236L, 237L, 238L, 239L, 240L, 241L, 242L, 243L, 244L, 
245L, 246L, 247L, 248L, 249L, 250L, 251L, 252L, 253L, 254L, 255L, 
256L, 257L, 258L, 259L, 260L, 261L, 262L, 263L, 264L, 265L, 266L, 
267L, 268L, 269L, 270L, 271L, 272L, 273L, 274L, 275L, 276L, 277L, 
278L, 279L, 280L, 281L, 282L, 283L, 284L, 285L, 286L, 287L, 288L, 
289L, 290L, 291L, 292L, 293L, 294L, 295L, 296L, 297L, 298L, 299L, 
300L, 301L, 302L, 303L, 304L, 305L, 306L, 307L, 308L, 309L, 310L, 
311L, 312L, 313L, 314L, 315L, 316L, 317L, 318L, 319L, 320L, 321L, 
322L, 323L, 324L, 325L, 326L, 327L, 328L, 329L, 330L, 331L, 332L, 
333L, 334L, 335L, 336L, 337L, 338L, 339L, 340L, 341L, 342L, 343L, 
344L, 345L, 346L, 347L, 348L, 349L, 350L, 351L, 352L, 353L, 354L, 
355L, 356L, 357L, 358L, 359L, 360L, 361L, 362L, 363L, 364L, 365L, 
366L, 367L, 368L, 369L, 370L, 371L, 372L, 373L, 374L, 375L, 376L, 
377L, 378L, 379L, 380L, 381L, 382L, 383L, 384L, 385L, 386L, 387L, 
388L, 389L, 390L, 391L, 392L, 393L, 394L, 395L, 396L, 397L, 398L, 
399L, 400L, 401L, 402L, 403L, 404L, 405L, 406L, 407L, 408L, 409L, 
410L, 411L, 412L, 413L, 414L, 415L, 416L, 417L, 418L, 419L, 420L, 
421L, 422L, 423L, 424L, 425L, 426L, 427L, 428L, 429L, 430L, 431L, 
432L, 433L, 434L, 435L, 1L)), row.names = c(NA, -473L), groups = structure(list(
    record_id = 110003, .rows = structure(list(1:473), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
  1. 在第 66 天或第 67 天,天数不会停止,而是继续计数。这发生在其他几个record_id 上。

  2. 在第 36 天和第 38 天,explorer_day_30_count 开始计算得太早了。

  3. 在最后一天,vulnerable_day_30_count 已经开始计数,尽管没有中断 3 天。

标签: rdplyrcounting

解决方案


考虑这样的函数:

# 1. Determine the positions of zeros (p0) in `x`.
# 2. Test whether p0 - 1, p0 - 2, ..., p0 - n + 1 are zeros; 
#    reduce p0 to those that satisfy all conditions.
# 3. Find the upper bounds (ub). For example, if p0 = c(1,2,3), 
#    then upper bounds will be c(2,3,?) (i.e. lead p0). 
#    ? is then 3 + 30 (the max you set) if it is still within 
#    the length of `x`; otherwise is the length of `x` plus 1.
# 4. Compute the sequence between each pair of p0 and ub and 
#    then unlist the result to a vector.
# 5. Assign the vector back to its correct position.

conditional_count <- function(x, n, max = 30L) {
  len <- length(x); out <- integer(len)
  p0 <- which(x == 0L)
  if (n > 1L)
    p0 <- Reduce(function(idx, i)  idx[x[(idx - i + 1L)] == 0L], seq_len(n)[-1L], p0)
  ub <- c(tail(p0, -1L), min(len + 1L, tail(p0, 1L) + max))
  res <- unlist(lapply(ub - p0, seq_len))
  `[<-`(out, p0[[1L]] + seq.int(0L, length(res) - 1L), res)
}

然后你可以

df %>% 
  mutate(
    vulnerable_period_30count = conditional_count(`treatment (type)`, 1L), 
    vulnerable_period_30count_3days = conditional_count(`treatment (type)`, 3L)
  )

输出(df我使用的只有四个变量:record_id, start, stop, treatment (type). 其他变量被删除了。)

   record_id start stop treatment (type) vulnerable_period_30count vulnerable_period_30count_3days
1     110101     0    1                1                         0                               0
2     110101     1    2                1                         0                               0
3     110101     2    3                1                         0                               0
4     110101     3    4                0                         1                               0
5     110101     4    5                0                         1                               0
6     110101     5    6                0                         1                               1
7     110101     6    7                0                         1                               1
8     110101     7    8                2                         2                               2
9     110101     8    9                2                         3                               3
10    110101     9   10                2                         4                               4
11    110101    10   11                0                         1                               5
12    110101    11   12                0                         1                               6
13    110101    12   13                0                         1                               1
14    110101    13   14                0                         1                               1
15    110101    14   15                0                         1                               1
16    110101    15   16                0                         1                               1
17    110101    16   17                3                         2                               2
18    110101    17   18                3                         3                               3
19    110101    18   19                0                         1                               4
20    110101    19   20                3                         2                               5
21    110101    20   21                3                         3                               6
22    110101    21   22                3                         4                               7
23    110101    22   23                0                         1                               8
24    110101    23   24                2                         2                               9
25    110101    24   25                2                         3                              10
26    110101    25   26                2                         4                              11
27    110101    26   27                0                         1                              12
28    110101    27   28                0                         1                              13
29    110101    28   29                0                         1                               1
30    110101    29   30                1                         2                               2
31    110101    30   31                1                         3                               3
32    110101    31   32                1                         4                               4
33    110101    32   33                1                         5                               5
34    110101    33   34                1                         6                               6
35    110101    34   35                1                         7                               7
36    110101    35   36                1                         8                               8
37    110101    36   37                1                         9                               9
38    110101    37   38                1                        10                              10
39    110101    38   39                1                        11                              11
40    110101    39   40                1                        12                              12
41    110101    40   41                1                        13                              13
42    110101    41   42                1                        14                              14
43    110101    42   43                1                        15                              15
44    110101    43   44                1                        16                              16
45    110101    44   45                1                        17                              17
46    110101    45   46                1                        18                              18
47    110101    46   47                1                        19                              19
48    110101    47   48                1                        20                              20
49    110101    48   49                1                        21                              21
50    110101    49   50                1                        22                              22
51    110101    50   51                1                        23                              23
52    110101    51   52                1                        24                              24
53    110101    52   53                1                        25                              25
54    110101    53   54                1                        26                              26
55    110101    54   55                1                        27                              27
56    110101    55   56                1                        28                              28
57    110101    56   57                1                        29                              29
58    110101    57   58                1                        30                              30
59    110101    58   59                1                         0                               0
60    110101    59   60                1                         0                               0

更新

conditional_count <- function(x, n, max = 30L) {
  len <- length(x); out <- integer(len)
  p0 <- which(x == 0L)
  if (n > 1L)
    p0 <- Reduce(function(idx, i)  idx[x[(idx - i + 1L)] == 0L], seq_len(n)[-1L], p0)
  if (length(p0) < 1L)
    return(out)
  ub <- c(tail(p0, -1L), min(len + 1L, tail(p0, 1L) + max))
  res <- unlist(lapply(ub - p0, seq_len))
  `[<-`(out, p0[[1L]] + seq.int(0L, length(res) - 1L), res)
}

此错误可能是由于没有满足您上述条件的零。因此,p0 的长度为 0。我们可以再添加一个 if-else 语句来处理这个边界条件。尝试使用上面显示的代码。如果它仍然无法正常工作,请考虑使用类似 的内容更新您的问题dput(df[record_id == *, ]),其中*代表不稳定的组(即在本例中为 110005)。

更新 2

conditional_count <- function(x, n, max = 30L) {
  len <- length(x); out <- integer(len)
  p0 <- which(x == 0L)
  if (n > 1L)
    p0 <- Reduce(function(idx, i) {
      lidx <- idx - i + 1L; lidx <- lidx[lidx > 0L]
      idx[x[lidx] == 0L]
    }, seq_len(n)[-1L], p0)
  if (length(p0) < 1L)
    return(out)
  ub <- c(tail(p0, -1L), min(len + 1L, tail(p0, 1L) + max))
  res <- unlist(lapply(ub - p0, seq_len))
  `[<-`(out, p0[[1L]] + seq.int(0L, length(res) - 1L), res)
}

我设法使用一些模拟数据重现了您的问题。该错误也是由边界条件引起的。当代码尝试验证序列 p0 - 1, p0 - 2, ... 时,如果向量的开头有一个零,它可能会变为负数treatment (type)。我已经纠正了那部分。尝试使用上面的更新代码。

更新 3

conditional_count <- function(x, n, max = 30L) {
  len <- length(x); out <- integer(len)
  p0 <- which(x == 0L)
  if (n > 1L)
    p0 <- Reduce(function(idx, i) {
      lidx <- idx - i + 1L
      idx <- idx[lidx > 0L]; lidx <- lidx[lidx > 0L]
      idx[x[lidx] == 0L]
    }, seq_len(n)[-1L], p0)
  if (length(p0) < 1L)
    return(out)
  ub <- pmin(c(tail(p0, -1L), len), p0 + max - 1L)
  rl <- ub - p0 + 1L
  res <- unlist(lapply(rl, seq_len))
  pos <- inverse.rle(list(lengths = rl, values = p0)) + res - 1L
  `[<-`(out, pos, res)
}

试试这个新的。我修改了一些逻辑。我之前假设只有最后一个有效零的计数可以超过 30 天。这就是为什么在有效零之间计数永远不会停止的原因。此外,合成向量没有分配到正确的位置。此错误还会造成您观察到的一些异常情况。我已经纠正了两者。结果现在看起来像这样

structure(list(record_id = c(110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003, 110003, 110003, 110003, 
110003, 110003, 110003, 110003, 110003), day_count = 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, 301, 302, 303, 304, 305, 306, 307, 
308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 
321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 
334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 
347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 
360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 
373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 
386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 
399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 
412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 
425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 
438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 
451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 
464, 465, 466, 467, 468, 469, 470, 471, 472), day_count_stop = c(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, 301, 302, 303, 304, 305, 306, 307, 
308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 
321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 
334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 
347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 
360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 
373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 
386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 
399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 
412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 
425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 
438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 
451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 
464, 465, 466, 467, 468, 469, 470, 471, 472, 473), oac_class = 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, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 0), vulnerable_period_30count = 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, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 
24L, 25L, 26L, 27L, 28L, 29L, 30L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), vulnerable_period_30count_3days = c(0L, 
0L, 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, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 
11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 
24L, 25L, 26L, 27L, 28L, 29L, 30L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L)), row.names = c(NA, 
-473L), groups = structure(list(record_id = 110003, .rows = structure(list(
    1:473), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", 
"list"))), row.names = 1L, class = c("tbl_df", "tbl", "data.frame"
), .drop = TRUE), class = c("grouped_df", "tbl_df", "tbl", "data.frame"
))

推荐阅读