How would I transform the following data.frame from wide to long while also generating a group column?
Example data:
dat <- data.frame(ID=paste0("id",1:10),readout1_g1=rnorm(10),readout1_g2=rnorm(10),readout1_g3=rnorm(10),readout2_g1=rnorm(10),readout2_g2=rnorm(10),readout2_g3=rnorm(10))
I have the following groups I am interested in that are part of the column names
groups <- c("g1","g2","g3","g1","g2","g3")
dat
     ID readout1_g1 readout1_g2 readout1_g3 readout2_g1 readout2_g2 readout2_g3
1   id1   0.2732715  -0.6328317  -1.3024276   1.7248944  -0.3343275  1.36908631
2   id2   2.0209029  -0.8575063   0.6022883  -0.9226497   1.4893213 -0.98697968
3   id3   1.6034079   0.8023266   1.0845380   1.2936800  -0.7395568 -0.29720316
4   id4  -1.5122641  -2.5982733   0.4245139  -1.2592326   1.5311672  0.38242248
5   id5   0.8096931  -0.6260401   0.7163551   0.2675392   0.8919616  0.01563483
6   id6  -0.8557278   0.1875746   1.3020202   0.4973898   2.7477934  0.38654868
7   id7   0.1556841  -1.1668916   0.6434463  -0.2245761  -0.6832238 -2.50482389
8   id8   0.7511197   0.4819956   0.2385116  -1.0582192   0.1067799  2.15636372
9   id9  -0.4613545  -1.2080645   1.3165922  -2.1785463  -1.2692302 -0.44555107
10 id10   0.3601222  -0.2414607  -1.5775119   2.0834873  -0.4656254  1.58457613
I would like to obtain the following long format:
ID readout1 readout2 group
id1 value value g1
id2 value value g1
...
id10 value value g3
I tried using pivot_longer in its most simple form but the rows were not ordered by groups properly in that rows having g1 for readout1 and g2 for readout2 for example.