У меня есть следующие фиктивные данные:
library(dplyr)
library(tidyr)
library(reshape2)
dt <- expand.grid(Year = 1990:2014, Product=LETTERS[1:8], Country = paste0(LETTERS, "I")) %>% select(Product, Country, Year)
dt$value <- rnorm(nrow(dt))
Я выбираю две комбинации страны продукта
sdt <- dt %>% filter((Product == "A" & Country == "AI") | (Product == "B" & Country =="EI"))
и я хочу видеть значения рядом для каждой комбинации. Я могу сделать это с dcast
:
sdt %>% dcast(Year ~ Product + Country)
Действительно ли возможно сделать это с spread
от пакета tidyr?
С новой функцией pivot_wider()
представленный в tidyr версии 1.0.0, это может быть выполнено с одним вызовом функции.
pivot_wider()
(дубликат: pivot_longer()
), работает подобный spread()
. Однако это предлагает дополнительную функциональность, такую как использование нескольких столбцов ключа/имени (и/или нескольких столбцов значений). С этой целью, аргумент names_from
— это указывает, от которого столбца (столбцов) названия новых переменных являются taken— может взять больше чем одно имя столбца (здесь Product
и Country
).
library("tidyr")
sdt %>%
pivot_wider(id_cols = Year,
names_from = c(Product, Country)) %>%
head(2)
#> # A tibble: 2 x 3
#> Year A_AI B_EI
#> <int> <dbl> <dbl>
#> 1 1990 -2.08 -0.113
#> 2 1991 -1.02 -0.0546