0

I am a beginner in R and so have a very basic question.

I would like to convert a database long to wide. I would also need to merge one column with one of the heading of the row. The original data will be like:

Trial number timepoint side-effect1 grade side-effect2 grade
1 6 0 1
1 12 3 2
1 24 2 0
2 3 1 2
2 6 1 3
2 24 2 0

What I really need is to have 1 row per patient and the side-effect title to be merged with the time point, to be organised this way:

Trial number side-effect1 grade_3 side-effect1 grade_6 side-effect1 grade_12 side-effect1 grade_24 side-effect2 grade_3 side-effect2 grade_6 side-effect2 grade_12 side-effect2 grade_24
1 0 3 2 1 2 0
2 1 1 2 2 3 0

Would someone be able to help? I have been reading a lot of things but have not really gone any further. Your help would be very much appreciated. Apologies if this too much of a beginner question. Thank you!

user438383
  • 5,716
  • 8
  • 28
  • 43
  • 1
    `tidyr::pivot_wider(df, names_from = timepoint, values_from = c(side.effect1.grade, side.effect2.grade))` – Ronak Shah Jul 09 '21 at 10:52

1 Answers1

2
df <- read.table(text = 'Trial_number   timepoint   side_effect1_grade  side_effect2_grade
1   6   0   1
1   12  3   2
1   24  2   0
2   3   1   2
2   6   1   3
2   24  2   0', header = T)

df
#>   Trial_number timepoint side_effect1_grade side_effect2_grade
#> 1            1         6                  0                  1
#> 2            1        12                  3                  2
#> 3            1        24                  2                  0
#> 4            2         3                  1                  2
#> 5            2         6                  1                  3
#> 6            2        24                  2                  0
library(tidyr, warn.conflicts = T)

df %>% pivot_wider(names_from = timepoint, values_from = c(side_effect1_grade, side_effect2_grade), names_sep = '_')
#> # A tibble: 2 x 9
#>   Trial_number side_effect1_grade_6 side_effect1_grade_12 side_effect1_grade_24
#>          <int>                <int>                 <int>                 <int>
#> 1            1                    0                     3                     2
#> 2            2                    1                    NA                     2
#> # ... with 5 more variables: side_effect1_grade_3 <int>,
#> #   side_effect2_grade_6 <int>, side_effect2_grade_12 <int>,
#> #   side_effect2_grade_24 <int>, side_effect2_grade_3 <int>

Created on 2021-07-09 by the reprex package (v2.0.0)

AnilGoyal
  • 25,297
  • 4
  • 27
  • 45
  • 1
    I would specify `T` or `F` as `TRUE` and `FALSE` as `F` is a function (in `collapse`). Also, `T` or `F` can be assigned as object names – akrun Jul 09 '21 at 17:31