tidyr :: pop_quiz:是否有更快/更透明的方式来重塑anscombe数据集?

时间:2016-10-19 16:21:46

标签: r reshape2 tidyr tidyverse

我试图通过tidyr变得更好。有没有更好的方法来准备anscombe数据集以使用ggplot2进行绘图?具体来说,我不喜欢添加数据(obs_num)。你会怎么做?

library(tidyverse)
library(datasets)

anscombe %>%
  mutate(obs_num = 1:n()) %>%
  gather(variable, value, -obs_num) %>%
  separate(variable, c("variable", "set"), 1) %>%
  spread(variable, value) %>%
  ggplot(aes(x = x, y = y)) +
  geom_point() +
  stat_smooth(method = "lm", se = FALSE, fullrange = TRUE) +
  facet_wrap(~set)

1 个答案:

答案 0 :(得分:2)

我认为您需要添加额外的列,以便在<c:forEach items="${dashboardBean.barModel}" var="barChart"> <p:column> <p:chart type="bar" model="#{barChart}" style="height:400px"> <p:commandButton type="button" value="Export" onclick="PF('dlg1').show();"/> </p:chart> <p:dialog widgetVar="dlg1" height="450px" width="800px" > <p:chart type="bar" model="#{barChart}"/> </p:dialog> </p:column> </c:forEach> 的调用中唯一标识每个观察。哈德利在对this SO question的评论中对此进行了讨论。另一种方法是单独堆叠spreadx列,如下面的代码所示,但我不明白为什么它会比你的版本更好。事实上,如果有yx值最终没有通信,情况会更糟:

y

另一个选择是使用基础bind_cols(anscombe %>% select(matches("x")) %>% gather(set, "x"), anscombe %>% select(matches("y")) %>% gather(key, "y")) %>% select(-key) %>% mutate(set = gsub("x", "Set: ", set)) ,它更简洁:

reshape