¿Es posible usar spread en múltiples columnas en tidyr similar a dcast?

Tengo los siguientes datos ficticios:

library(dplyr) library(tidyr) library(reshape2) dt % select(Product, Country, Year) dt$value <- rnorm(nrow(dt)) 

Escojo dos combinaciones producto-país

 sdt % filter((Product == "A" & Country == "AI") | (Product == "B" & Country =="EI")) 

y quiero ver los valores uno al lado del otro para cada combinación. Puedo hacer esto con dcast :

 sdt %>% dcast(Year ~ Product + Country) 

¿Es posible hacer esto con spread desde el paquete tidyr ?

Una opción sería crear un nuevo ‘Prod_Count’ uniendo las columnas ‘Producto’ y ‘País’ pegando, eliminar esas columnas con la select y cambiar la forma de ‘largo’ a ‘ancho’ usando spread de tidyr .

  library(dplyr) library(tidyr) sdt %>% mutate(Prod_Count=paste(Product, Country, sep="_")) %>% select(-Product, -Country)%>% spread(Prod_Count, value)%>% head(2) # Year A_AI B_EI #1 1990 0.7878674 0.2486044 #2 1991 0.2343285 -1.1694878 

O podemos evitar un par de pasos usando unite de tidyr (del comentario de @ tidyr ) y tidyr forma como antes.

  sdt%>% unite(Prod_Count, Product,Country) %>% spread(Prod_Count, value)%>% head(2) # Year A_AI B_EI # 1 1990 0.7878674 0.2486044 # 2 1991 0.2343285 -1.1694878