我有以下虚拟数据:

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:

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

tidyr号包装中的spread个可以这样做吗?

推荐答案

一个选项是通过将"产品"和"国家"列连接paste来创建一个新的"产品计数",用select删除这些列,并用tidyr中的spread将其从"长"改为"宽".

 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中的unite(来自@beetroot的 comments )来避免几个步骤,并像以前一样进行reshape .

 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

R相关问答推荐

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

当两个图层映射到相同的美学时,隐藏一个图层的图例值

如何在格子中添加双曲曲线

自动变更列表

如果可能,将数字列转换为整数,否则保留为数字

如何写商,水平线,在一个单元格的表在R

有效识别长载体中的高/低命中

比较理论阿尔法和经验阿尔法

当我们有多个反斜杠和/特殊字符时使用Gsubing

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

有没有办法定制Plot(allEffects())面板标题?

如果条件匹配,则使用Mariate粘贴列名

整理曲线图、曲线图和点图

Ggplot2如何找到存储在对象中的残差和拟合值?

是否从列中删除★符号?

在使用ggplot2的情况下,如何在使用coord_trans函数的同时,根据未转换的坐标比来定位geom_瓷砖?

将日期列从字符转换为日期得到的结果是NAS

臭虫?GradeThis::grade_this_code()在`-code-check`块中失败

如何将数据框压缩为更宽,同时将行输入保持为行输入,而不是R中的列名?

Gggvenn为Venn增加了不存在的价值