Как отформатировать мой набор данных (из Grahpad Prism) для использования с R (одна строка на образец)? - PullRequest
0 голосов
/ 07 июня 2019

Я импортировал свой набор данных из Graphpad Prism:

library(xml2)
library(pzfx)
pzfx_tables("Dataprism.pzfx") #read prism file
datapoids <- read_pzfx("Dataprism.pzfx", "poidsXY") #import wanted sheet

datapoids 
   time ttt1_1 ttt1_2 ttt1_3 ttt2_1 ttt2_2 ttt2_3 ttt3_1 ttt3_2 ttt3_3
1     1      0      0      0      0      0      0      0      0      0
2     2     15     17     19     45     51     57     90    102    114
3     3     20     22     25     60     66     75    120    132    150
4     4     30     34     36     90    102    108    180    204    216
5     5     40     50     47    120    130    141    240    300    282
6     6     50     50     60    150    150    180    300    300    360
7     7     60     65     70    210    228    245    420    455    490
8     8     70     75     86    245    262    301    490    525    602
9     9     80     90    110    280    315    385    560    630    770
10   10     90    120    130    315    420    455    630    840    910
11   11    130    160    195    455    560    683    910   1120   1365
12   12    160    200    240    560    700    840   1120   1400   1680
13   13    240    300    360    720    900   1080   1440   1800   2160
14   14    320    400    480    960   1200   1440   1920   2400   2880
15   15    450    500    650   1350   1500   1950   2700   3000   3900
> dput(head(datapoids, 10000000))
structure(list(time = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15), ttt1_1 = c(0, 15, 20, 30, 40, 50, 60, 70, 80, 90, 
130, 160, 240, 320, 450), ttt1_2 = c(0, 17, 22, 34, 50, 50, 65, 
75, 90, 120, 160, 200, 300, 400, 500), ttt1_3 = c(0, 19, 25, 
36, 47, 60, 70, 86, 110, 130, 195, 240, 360, 480, 650), ttt2_1 = c(0, 
45, 60, 90, 120, 150, 210, 245, 280, 315, 455, 560, 720, 960, 
1350), ttt2_2 = c(0, 51, 66, 102, 130, 150, 228, 262, 315, 420, 
560, 700, 900, 1200, 1500), ttt2_3 = c(0, 57, 75, 108, 141, 180, 
245, 301, 385, 455, 683, 840, 1080, 1440, 1950), ttt3_1 = c(0, 
90, 120, 180, 240, 300, 420, 490, 560, 630, 910, 1120, 1440, 
1920, 2700), ttt3_2 = c(0, 102, 132, 204, 300, 300, 455, 525, 
630, 840, 1120, 1400, 1800, 2400, 3000), ttt3_3 = c(0, 114, 150, 
216, 282, 360, 490, 602, 770, 910, 1365, 1680, 2160, 2880, 3900
)), row.names = c(NA, 15L), class = "data.frame")

Где первый столбец представляет каждый момент времени. Другие столбцы представляют различные измерения веса в каждый момент времени в другой группе: group1 (3 человека: ttt1_1, ttt1_2, ttt1_3), group1 (3 человека: ttt2_1, ttt2_2, ttt2_3) и group3 (3 человека: ttt3_1, ttt3_2, ttt3_3).

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

> print.data.frame(datapoids)
    weight group time
1        0     1    1
2        0     1    1
3        0     1    1
4        0     2    1
5        0     2    1
6        0     2    1
7        0     3    1
8        0     3    1
9        0     3    1
10      15     1    2
11      17     1    2
12      19     1    2
13      45     2    2
14      51     2    2
15      57     2    2
16      90     3    2
17     102     3    2
18     114     3    2
19      20     1    3
20      22     1    3
21      25     1    3
22      60     2    3
23      66     2    3
24      75     2    3
25     120     3    3
26     132     3    3
27     150     3    3
28      30     1    4
29      34     1    4
30      36     1    4
31      90     2    4
32     102     2    4
33     108     2    4
34     180     3    4
35     204     3    4
36     216     3    4
37      40     1    5
38      50     1    5
39      47     1    5
40     120     2    5
41     130     2    5
42     141     2    5
43     240     3    5
44     300     3    5
45     282     3    5
46      50     1    6
47      50     1    6
48      60     1    6
49     150     2    6
50     150     2    6
51     180     2    6
52     300     3    6
53     300     3    6
54     360     3    6
55      60     1    7
56      65     1    7
57      70     1    7
58     210     2    7
59     228     2    7
60     245     2    7
61     420     3    7
62     455     3    7
63     490     3    7
64      70     1    8
65      75     1    8
66      86     1    8
67     245     2    8
68     262     2    8
69     301     2    8
70     490     3    8
71     525     3    8
72     602     3    8
73      80     1    9
74      90     1    9
75     110     1    9
76     280     2    9
77     315     2    9
78     385     2    9
79     560     3    9
80     630     3    9
81     770     3    9
82      90     1   10
83     120     1   10
84     130     1   10
85     315     2   10
86     420     2   10
87     455     2   10
88     630     3   10
89     840     3   10
90     910     3   10
91     130     1   11
92     160     1   11
93     195     1   11
94     455     2   11
95     560     2   11
96     683     2   11
97     910     3   11
98    1120     3   11
99    1365     3   11
100    160     1   12
101    200     1   12
102    240     1   12
103    560     2   12
104    700     2   12
105    840     2   12
106   1120     3   12
107   1400     3   12
108   1680     3   12
109    240     1   13
110    300     1   13
111    360     1   13
112    720     2   13
113    900     2   13
114   1080     2   13
115   1440     3   13
116   1800     3   13
117   2160     3   13
118    320     1   14
119    400     1   14
120    480     1   14
121    960     2   14
122   1200     2   14
123   1440     2   14
124   1920     3   14
125   2400     3   14
126   2880     3   14
127    450     1   15
128    500     1   15
129    650     1   15
130   1350     2   15
131   1500     2   15
132   1950     2   15
133   2700     3   15
134   3000     3   15
135   3900     3   15
> dput(head(datapoids, 10000000))
structure(list(weight = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 17, 
19, 45, 51, 57, 90, 102, 114, 20, 22, 25, 60, 66, 75, 120, 132, 
150, 30, 34, 36, 90, 102, 108, 180, 204, 216, 40, 50, 47, 120, 
130, 141, 240, 300, 282, 50, 50, 60, 150, 150, 180, 300, 300, 
360, 60, 65, 70, 210, 228, 245, 420, 455, 490, 70, 75, 86, 245, 
262, 301, 490, 525, 602, 80, 90, 110, 280, 315, 385, 560, 630, 
770, 90, 120, 130, 315, 420, 455, 630, 840, 910, 130, 160, 195, 
455, 560, 683, 910, 1120, 1365, 160, 200, 240, 560, 700, 840, 
1120, 1400, 1680, 240, 300, 360, 720, 900, 1080, 1440, 1800, 
2160, 320, 400, 480, 960, 1200, 1440, 1920, 2400, 2880, 450, 
500, 650, 1350, 1500, 1950, 2700, 3000, 3900), group = structure(c(1L, 
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 
3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 
2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 
1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 
1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 
2L, 3L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 1L, 
2L, 2L, 2L, 3L, 3L, 3L), .Label = c("1", "2", "3"), class = "factor"), 
    time = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 
    5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 
    7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
    8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 
    10L, 10L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 11L, 
    11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
    13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 
    14L, 14L, 14L, 14L, 14L, 14L, 15L, 15L, 15L, 15L, 15L, 15L, 
    15L, 15L, 15L), .Label = c("1", "2", "3", "4", "5", "6", 
    "7", "8", "9", "10", "11", "12", "13", "14", "15"), class = "factor")), row.names = c(NA, 
-135L), class = c("tbl_df", "tbl", "data.frame"))

Но есть ли способ сделать это в R? Спасибо за вашу помощь!

...