Gather multiple date/value columns using tidyr

前端 未结 5 1005
慢半拍i
慢半拍i 2020-12-19 17:14

I have a data set containing (amongst others) multiple columns with dates and corresponding values (repeated measurements). Is there a way to turn this into a long data set

5条回答
  •  星月不相逢
    2020-12-19 17:21

    This does a reshape and then sorts the rows.

    The first two lines just set up the v.names and varying arguments to reshape. v.names defines the new column names and varying, is a list whose two components contain logical selection vectors of the date and value columns respectively.

    The last line of code does the sorting and can be omitted if the row order does not matter.

    No packages are used.

    v.names <- c("date", "value")
    varying <- lapply(v.names, startsWith, x = names(df))
    r <- reshape(df, dir = "long", varying = varying, v.names = v.names)
    r[order(r$id, r$time), ]
    

    giving the following where the id and time columns relate the output rows back to the input:

         id age time       date value
    1.1   1  12    1 2015-08-14     3
    1.2   1  12    2 2015-07-11    24
    1.3   1  12    3 2015-07-04     4
    2.1   2  92    1 2015-08-03    17
    2.2   2  92    2 2015-07-19    52
    2.3   2  92    3 2015-07-01    93
    3.1   3  28    1 2015-08-24    86
    3.2   3  28    2 2015-08-12    80
    3.3   3  28    3 2015-09-01    56
    4.1   4  45    1 2015-09-13    78
    4.2   4  45    2 2015-07-07    92
    4.3   4  45    3 2015-08-10    81
    5.1   5  25    1 2015-08-27    95
    5.2   5  25    2 2015-09-08    68
    5.3   5  25    3 2015-06-27    82
    6.1   6   1    1 2015-08-21    16
    6.2   6   1    2 2015-06-15    35
    6.3   6   1    3 2015-07-24    30
    7.1   7   7    1 2015-07-19    59
    7.2   7   7    2 2015-07-08    33
    7.3   7   7    3 2015-08-11    49
    8.1   8  71    1 2015-07-28    19
    8.2   8  71    2 2015-06-29    74
    8.3   8  71    3 2015-08-05    25
    9.1   9  59    1 2015-07-05    64
    9.2   9  59    2 2015-09-04    30
    9.3   9  59    3 2015-07-30    74
    10.1 10  96    1 2015-09-12    69
    10.2 10  96    2 2015-07-23    72
    10.3 10  96    3 2015-08-19    23
    

提交回复
热议问题