Transform from Wide to Long without sorting columns

后端 未结 5 1626
清酒与你
清酒与你 2020-12-21 13:24

I want to convert a dataframe from wide format to long format.

Here it is a toy example:

mydata <- data.frame(ID=1:5, ZA_1=1:5, 
            ZA_2=         


        
5条回答
  •  无人及你
    2020-12-21 13:49

    An alternative approach with data.table:

    melt(mydata, id = 'ID')[, c("variable", "measure") := tstrsplit(variable, '_')
                            ][, variable := factor(variable, levels = unique(variable))
                              ][, dcast(.SD, ID + measure ~ variable, value.var = 'value')]
    

    which gives:

        ID measure ZA BB CC
     1:  1       1  1  3 NA
     2:  1       2  5  6 NA
     3:  1       7 NA NA  6
     4:  2       1  2  3 NA
     5:  2       2  4  6 NA
     6:  2       7 NA NA  5
     7:  3       1  3  3 NA
     8:  3       2  3  6 NA
     9:  3       7 NA NA  4
    10:  4       1  4  3 NA
    11:  4       2  2  6 NA
    12:  4       7 NA NA  3
    13:  5       1  5  3 NA
    14:  5       2  1  6 NA
    15:  5       7 NA NA  2
    

提交回复
热议问题