首页 > 解决方案 > R,从图中推断平均分数

问题描述

我有一个这样的图表: 在此处输入图像描述

使用这样创建它的数据:

test<-structure(list(study_id = c(1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 13, 
13, 13, 13, 13, 34, 34, 34, 34, 34, 40, 40, 40, 40, 40, 44, 44, 
44, 44, 44, 47, 47, 47, 47, 47, 49, 49, 49, 49, 49, 51, 51, 51, 
51, 51, 61, 61, 61, 61, 61, 66, 66, 66, 66, 66, 67, 67, 67, 67, 
67, 68, 68, 68, 68, 68, 72, 72, 72, 72, 72, 75, 75, 75, 75, 75, 
80, 80, 80, 80, 80, 84, 84, 84, 84, 84, 86, 86, 86, 86, 86, 94, 
94, 94, 94, 94, 95, 95, 95, 95, 95, 101, 101, 101, 101, 101, 
105, 105, 105, 105, 105, 111, 111, 111, 111, 111, 117, 117, 117, 
117, 117, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 125, 
125, 125, 125, 125, 126, 126, 126, 126, 126, 131, 131, 131, 131, 
131, 145, 145, 145, 145, 145, 153, 153, 153, 153, 153, 154, 154, 
154, 154, 154, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 
161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 166, 166, 166, 
166, 166, 167, 167, 167, 167, 167, 169, 169, 169, 169, 169, 172, 
172, 172, 172, 172, 175, 175, 175, 175, 175, 179, 179, 179, 179, 
179, 180, 180, 180, 180, 180, 184, 184, 184, 184, 184, 185, 185, 
185, 185, 185, 188, 188, 188, 188, 188, 190, 190, 190, 190, 190, 
192, 192, 192, 192, 192, 194, 194, 194, 194, 194, 195, 195, 195, 
195, 195, 197, 197, 197, 197, 197, 199, 199, 199, 199, 199, 203, 
203, 203, 203, 203, 207, 207, 207, 207, 207, 210, 210, 210, 210, 
210, 211, 211, 211, 211, 211, 212, 212, 212, 212, 212, 217, 217, 
217, 217, 217, 221, 221, 221, 221, 221, 223, 223, 223, 223, 223, 
227, 227, 227, 227, 227, 228, 228, 228, 228, 228, 229, 229, 229, 
229, 229, 239, 239, 239, 239, 239, 244, 244, 244, 244, 244, 253, 
253, 253, 253, 253, 256, 256, 256, 256, 256, 257, 257, 257, 257, 
257, 259, 259, 259, 259, 259, 266, 266, 266, 266, 266, 272, 272, 
272, 272, 272, 275, 275, 275, 275, 275, 277, 277, 277, 277, 277, 
278, 278, 278, 278, 278, 284, 284, 284, 284, 284, 288, 288, 288, 
288, 288, 290, 290, 290, 290, 290, 291, 291, 291, 291, 291, 292, 
292, 292, 292, 292, 294, 294, 294, 294, 294, 295, 295, 295, 295, 
295, 296, 296, 296, 296, 296, 299, 299, 299, 299, 299, 300, 300, 
300, 300, 300, 301, 301, 301, 301, 301, 303, 303, 303, 303, 303, 
305, 305, 305, 305, 305, 306, 306, 306, 306, 306, 307, 307, 307, 
307, 307, 309, 309, 309, 309, 309, 313, 313, 313, 313, 313, 315, 
315, 315, 315, 315, 316, 316, 316, 316, 316, 320, 320, 320, 320, 
320, 324, 324, 324, 324, 324, 331, 331, 331, 331, 331, 336, 336, 
336, 336, 336, 337, 337, 337, 337, 337, 348, 348, 348, 348, 348, 
349, 349, 349, 349, 349, 352, 352, 352, 352, 352, 353, 353, 353, 
353, 353, 367, 367, 367, 367, 367, 373, 373, 373, 373, 373, 382, 
382, 382, 382, 382, 387, 387, 387, 387, 387, 388, 388, 388, 388, 
388, 389, 389, 389, 389, 389, 392, 392, 392, 392, 392, 398, 398, 
398, 398, 398, 401, 401, 401, 401, 401, 402, 402, 402, 402, 402, 
404, 404, 404, 404, 404, 405, 405, 405, 405, 405, 410, 410, 410, 
410, 410, 411, 411, 411, 411, 411, 412, 412, 412, 412, 412, 413, 
413, 413, 413, 413, 414, 414, 414, 414, 414, 415, 415, 415, 415, 
415, 420, 420, 420, 420, 420, 428, 428, 428, 428, 428, 431, 431, 
431, 431, 431, 433, 433, 433, 433, 433, 434, 434, 434, 434, 434, 
436, 436, 436, 436, 436), Time = structure(c(1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 
5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 
1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 
4L, 5L), .Label = c("1", "2", "3", "4", "5"), class = "factor"), 
    Score = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 3, NA, NA, NA, NA, 0, 0, 
    NA, NA, NA, NA, NA, NA, NA, NA, 4, 7, NA, NA, NA, NA, NA, 
    NA, NA, NA, 4, NA, NA, NA, NA, 0, NA, NA, NA, NA, 0, NA, 
    NA, NA, NA, 0, 0, 7, 8, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, 5, 7, NA, NA, NA, 0, NA, NA, 
    NA, NA, 0, 5, 8, NA, NA, 7, 8, NA, NA, NA, 0, 0, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 4, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 0, NA, NA, NA, NA, 4, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 2, 8, 8, NA, NA, 3, NA, NA, NA, NA, 1, NA, NA, NA, NA, 
    0, 9, NA, NA, NA, 2, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    2, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 0, 1, 5, 5, NA, 
    NA, NA, NA, NA, 3, 4, 4, NA, NA, 0, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, NA, 
    NA, NA, NA, 0, 0, 0, 1, 1, 9, 9, NA, NA, NA, NA, NA, NA, 
    NA, NA, 0, 2, 5, 5, NA, NA, NA, NA, NA, NA, 0, 0, 0, 0, 0, 
    0, NA, NA, NA, NA, NA, NA, NA, NA, NA, 6, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, 
    0, NA, NA, NA, NA, 7, NA, NA, NA, NA, 5, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, 7, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, 0, 4, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 1, 1, 1, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, 8, 8, NA, NA, NA, 0, 
    NA, NA, NA, NA, 0, NA, NA, NA, NA, 0, 3, NA, NA, NA, 6, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 5, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 7, NA, 
    NA, NA, NA, 0, 0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 3, 8, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, 5, 5, 
    5, NA, NA, 0, NA, NA, NA, NA, 2, 7, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, 0, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, 0, 0, NA, NA, NA, NA, NA, NA, NA, NA, 0, 3, NA, NA, 
    NA, 0, NA, NA, NA, NA, 7, 7, 8, NA, NA, 0, NA, 0, NA, NA, 
    2, 4, 4, NA, NA), TimeBetweenScans = c(NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    316, NA, NA, NA, NA, 113, 139, NA, NA, NA, NA, NA, NA, NA, 
    NA, 335, 660, NA, NA, NA, NA, NA, NA, NA, NA, 104, NA, NA, 
    NA, NA, 7, NA, NA, NA, NA, 42, NA, NA, NA, NA, 30, 84, 467, 
    826, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 643, 1794, NA, NA, NA, 404, NA, NA, NA, NA, 40, 
    221, 394, NA, NA, 171, 320, NA, NA, NA, 51, 227, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 449, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, 56, NA, NA, NA, NA, 104, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, 79, 989, 1097, NA, NA, 116, NA, NA, NA, NA, 65, 
    NA, NA, NA, NA, 39, 411, NA, NA, NA, 1193, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, 142, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 106, 216, 266, 497, 575, NA, NA, NA, NA, NA, 221, 474, 
    796, NA, NA, 18, NA, NA, NA, NA, 87, 1565, NA, NA, NA, NA, 
    NA, NA, NA, NA, 36, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 207, 
    529, NA, NA, NA, NA, NA, NA, NA, NA, 125, NA, NA, NA, NA, 
    137, 372, 941, 1102, 1225, 927, 1006, NA, NA, NA, NA, NA, 
    NA, NA, NA, 63, 429, 533, 567, NA, NA, NA, NA, NA, NA, 156, 
    447, 470, 1204, 1266, 32, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 411, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, 201, NA, NA, NA, NA, 160, NA, NA, NA, NA, 166, NA, 
    NA, NA, NA, 459, NA, NA, NA, NA, NA, NA, NA, NA, NA, 212, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 50, 
    313, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, 312, 530, 783, 1574, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, 1627, 1706, NA, NA, NA, 354, 
    NA, NA, NA, NA, 33, NA, NA, NA, NA, 62, 130, NA, NA, NA, 
    1416, NA, NA, NA, NA, 121, NA, NA, NA, NA, 842, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, 24, 64, 82, 122, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, 250, NA, NA, NA, NA, 174, 300, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, 216, 264, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 17, 
    NA, NA, NA, NA, 214, 268, 388, NA, NA, 24, NA, NA, NA, NA, 
    149, 382, NA, NA, NA, NA, NA, NA, NA, NA, 8, NA, NA, NA, 
    NA, 91, 188, NA, NA, NA, NA, NA, NA, NA, NA, 72, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 9, 38, NA, 
    NA, NA, NA, NA, NA, NA, NA, 13, 138, NA, NA, NA, 42, NA, 
    NA, NA, NA, 771, 1200, 1512, NA, NA, 113, 166, 180, NA, NA, 
    122, 475, 640, NA, NA), Groups = c(NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Two", 
    NA, NA, NA, NA, "Zero", "Zero", NA, NA, NA, NA, NA, NA, NA, 
    NA, "Two", "Two", NA, NA, NA, NA, NA, NA, NA, NA, "Two", 
    NA, NA, NA, NA, "Zero", NA, NA, NA, NA, "Zero", NA, NA, NA, 
    NA, "Two", "Two", "Two", "Two", NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, "Two", "Two", NA, NA, 
    NA, "One", NA, NA, NA, NA, "Two", "Two", "Two", NA, NA, "Two", 
    "Two", NA, NA, NA, "Zero", "Zero", NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Two", NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Zero", 
    NA, NA, NA, NA, "Two", NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    "Two", "Two", "Two", NA, NA, "Two", NA, NA, NA, NA, "Two", 
    NA, NA, NA, NA, "Two", "Two", NA, NA, NA, "One", NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, "Two", NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, "Two", "Two", "Two", "Two", "Two", NA, NA, NA, 
    NA, NA, "Two", "Two", "Two", NA, NA, "Zero", NA, NA, NA, 
    NA, "Zero", "Zero", NA, NA, NA, NA, NA, NA, NA, NA, "Zero", 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, "Zero", "Zero", NA, NA, 
    NA, NA, NA, NA, NA, NA, "Zero", NA, NA, NA, NA, "One", "One", 
    "One", "One", "One", "Two", "Two", NA, NA, NA, NA, NA, NA, 
    NA, NA, "Two", "Two", "Two", "Two", NA, NA, NA, NA, NA, NA, 
    "One", "One", "One", "One", "One", "Zero", NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, "Two", NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, "Zero", NA, NA, NA, NA, "Zero", NA, 
    NA, NA, NA, "Two", NA, NA, NA, NA, "Two", NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, "Two", NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, "Two", "Two", NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "One", 
    "One", "One", "One", NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, "Two", "Two", NA, NA, NA, "One", NA, NA, NA, NA, 
    "Zero", NA, NA, NA, NA, "Two", "Two", NA, NA, NA, "Two", 
    NA, NA, NA, NA, "Zero", NA, NA, NA, NA, "Two", NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, "Two", NA, NA, NA, NA, "Zero", "One", NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, "Two", "Two", NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, "Zero", NA, NA, NA, NA, "Two", "Two", "Two", NA, NA, 
    "Zero", NA, NA, NA, NA, "Two", "Two", NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, "Zero", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, "Zero", "Zero", NA, NA, NA, NA, NA, NA, NA, 
    NA, "Zero", "Two", NA, NA, NA, "Zero", NA, NA, NA, NA, "Two", 
    "Two", "Two", NA, NA, "One", "One", "One", NA, NA, "Two", 
    "Two", "Two", NA, NA)), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -630L), spec = structure(list(
    cols = list(study_id = structure(list(), class = c("collector_double", 
    "collector")), Time = structure(list(), class = c("collector_double", 
    "collector")), Score = structure(list(), class = c("collector_double", 
    "collector")), TimeBetweenScans = structure(list(), class = c("collector_double", 
    "collector")), Groups = structure(list(), class = c("collector_character", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

创建图表的代码如下:我将研究 id 分组,以便绘制一条虚线连接每个患者的所有分数。所以每一行都是一个人。

test%>%ggplot(aes(x=TimeBetweenScans,y=Score, group=study_id, color=Time, shape=Groups))+geom_point(size=3)+geom_line(color="Black", linetype="dotted")+labs(title = "Oulu Score vs Time",y="Oulu Score",x="Time from Post-Op Scan to Follow Up Scan", color="Follow-up Scan")

我被要求在不同的时间范围内获得“平均”分数。即 1 年随访 (TimeBetweenScans = "365")、2 年、3 年和 4 年的平均分数。

因此,例如,通过目测,您将获取所有穿过我在 1 年标记处绘制的红线的虚线,找出它们越过那条线时它们在 Y 轴上的位置,然后平均它们的“分数”。 在此处输入图像描述

如果我在“TimeBetweenScans”列中有包含“365”的行,我会写如下内容:

test%>%filter(TimeBetweenScans=="365")%>%summarise(MeanScore=mean(Score))

该代码将仅选择年份标记处的数据并为我平均 y 轴得分。但是由于 365 实际上并不是连续的,而且它只存在于那些虚线穿过它时,所以我需要推断在“365”处那个人会是什么。

那有意义吗?

如果是这样,我该怎么做?

标签: r

解决方案


这是一个想法。我过滤了每个所需时间 ( year_in_days)附近的最近几天study_id。然后我计算了这些点之间的回归线并预测Scoreyear_in_days. 在最后一步中,我计算了所有预测的平均值。

过滤时您可能会收到很多警告,因为很多study_id组没有任何价值 - 只是 NA。

代码

# Time you are looking for
year_in_days = 100

test %>% 
  group_by(study_id) %>% 
  group_modify(~{
    .x %>% 
      # filter inside each group the nearest time to year_in_days (lower and upper)
      filter((TimeBetweenScans %in% min(TimeBetweenScans[TimeBetweenScans > year_in_days], na.rm = T)) |
               (TimeBetweenScans %in% max(TimeBetweenScans[TimeBetweenScans < year_in_days], na.rm = T))) %>%
      # filter groups with two meassurments and values for Score
      filter(n() == 2 &
               !is.na(Score)) 
    }) %>%
  ungroup() %>%
  group_by(study_id) %>%
  group_modify(~{
    # for each group predict the value at year "year_in_days"
    broom::tidy(predict(lm(Score ~ TimeBetweenScans, .x), data.frame(TimeBetweenScans = c(year_in_days))))
  }) %>%
  ungroup() %>%
# calculate mean score over all predictions
  summarise(mean(x))

输出

# A tibble: 1 x 1
  `mean(x)`
      <dbl>
1      1.14

推荐阅读