Действительно ли возможно использовать распространение на нескольких столбцах в tidyr, подобном dcast?

У меня есть следующие фиктивные данные:

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?

61
задан 24 July 2014 в 13:41

1 ответ

С новой функцией 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

См. также: https://tidyr.tidyverse.org/articles/pivot.html

6
ответ дан 31 October 2019 в 16:24

Другие вопросы по тегам:

Похожие вопросы: