tidyr::pop_测验:是否有一种更快/更透明的方法来重塑anscombe数据集?

tidyr::pop_测验:是否有一种更快/更透明的方法来重塑anscombe数据集?,r,reshape2,tidyr,tidyverse,R,Reshape2,Tidyr,Tidyverse,我正在努力与tidyr相处融洽。是否有更好的方法准备使用ggplot2打印的anscombe数据集?具体来说,我不喜欢添加数据(obs\u num)。你会怎么做 library(tidyverse) library(datasets) anscombe %>% mutate(obs_num = 1:n()) %>% gather(variable, value, -obs_num) %>% separate(variable, c("variable", "set

我正在努力与
tidyr
相处融洽。是否有更好的方法准备使用
ggplot2
打印的
anscombe
数据集?具体来说,我不喜欢添加数据(
obs\u 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)

我认为您需要添加额外的列,以便在调用
spread
时唯一地标识每个观察值。哈德利在评论中对此进行了讨论。另一种方法是分别堆叠
x
y
列,如下面的代码所示,但我不明白为什么这会比您的版本更好。事实上,如果出现
x
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))
另一种选择是使用base
重塑
,这更简洁:

anscombe %>% 
  reshape(varying=1:8, direction="long", sep="", timevar="set")

我想知道有多少人检查了一下,看《流行语小测验》是否真的是tidyr中的一个功能。是的。
重塑
神秘而强大!奇妙的单线解决方案,我不相信tidyverse解决方案在这种情况下是不透明的。是的,我发现base
Reformate
也很神秘。如果
tidyr
可以类似地处理多对对应列,那就太好了。