Varun
Varun

Reputation: 1321

R spread across multiple value columns

My dataset looks like this -

dataset = data.frame(Site=c(rep('A',6),rep('B',6)),Date=c(rep(c('2019-05-31','2019-04-30','2019-03-31'),4)),Question=c(rep('Q1',3),rep('Q2',3)),Score=runif(12,0.5,1),Average=runif(12,0.5,1))

I'd like to spread columns in such a way that the the first two columns contain the Site and Question and the remaining columns are have the Score_Date and Average_Date

Here's an example of what the first line of the resulting table would look like

  Site Question Score_2019.03.31 Score_2019.04.30 Score_2019.05.31 Average_2019.03.31 Average_2019.04.30 Average_2019.05.31
   A       Q1        0.9117566        0.8661078        0.5624139          0.7246694          0.8870703          0.6401099

I tried using unite & spread from tidyr but nowhere close to the result

Any inputs would be highly appreciated

Upvotes: 0

Views: 135

Answers (1)

yfa
yfa

Reputation: 101

Using tidyr and dplyr from the tidyverse, you could do the following:

library(tidyverse)
dataset %>% 
  nest(Score, Average, .key = 'value_col') %>% 
  spread(key = Date, value = value_col) %>% 
  unnest(`2019-03-31`, `2019-04-30`, `2019-05-31`, .sep = "_")

Upvotes: 1

Related Questions