Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

tidyr - spread multiple columns

Tags:

r

dplyr

spread

I'm preparing data for a network meta-analysis and I am having difficult in tyding the columns.

If I have this initial dataset:

Study Trt       y    sd   n
1       1   -1.22  3.70  54
1       3   -1.53  4.28  95
2       1   -0.30  4.40  76 
2       2   -2.60  4.30  71
2       4    -1.2   4.3  81

How can I finish with this other one?

Study Treatment1    y1  sd1  n1 Treatment2    y2  sd2  n2 Treatment3   y3 sd3 n3
    1     1          1 -1.22 3.70  54          3 -1.53 4.28  95         NA   NA  NA NA
    2     3          1 -0.30 4.40  76          2 -2.60 4.30  71          4 -1.2 4.3 81

I'm really stuck in this step, and I'd really appreciate some help...

like image 903
Juanchi Avatar asked Apr 29 '17 11:04

Juanchi


People also ask

How do I spread a column in R?

To use spread() , pass it the name of a data frame, then the name of the key column in the data frame, and then the name of the value column. Pass the column names as they are; do not use quotes. To tidy table2 , you would pass spread() the key column and then the value column.

What does the spread () function from the R package Tidyr do?

The spread() function from the tidyr library can be helpful to spread a key-value pair across different columns. This function also helps reshape the data from long format to wide format. This function works exactly opposite of gather(). So, it is used contrarily.


1 Answers

We can gather to 'long' format, then unite multiple columns to single and spread it to wide

library(tidyverse)
gather(df1, Var, Val,  Trt:n) %>%
      group_by(Study, Var) %>% 
      mutate(n = row_number()) %>%
      unite(VarT, Var, n, sep="") %>%
      spread(VarT, Val, fill=0)
like image 141
akrun Avatar answered Oct 22 '22 22:10

akrun