是否有可能使用类似于dcast的tidyr中的多列进行传播?
我有以下的虚拟数据:
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))
我select了两个产品 – 国家组合
sdt <- dt %>% filter((Product == "A" & Country == "AI") | (Product == "B" & Country =="EI"))
我想看看每个组合的价值观。 我可以用dcast
做到这dcast
:
sdt %>% dcast(Year ~ Product + Country)
是否有可能从包裹tidyr spread
做到这一点 ?
一种select是通过paste
join“产品”和“国家”列来创build新的“产品计数”,使用从tidyr
spread
的select
从“长”到“宽”重新移除这些列。
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
或者,我们可以通过使用tidyr
(从@ tidyr
的评论) unite
,并像以前一样重塑,从而避免几个步骤。
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