#data
set.seed(1)
data_foo <- data.frame(id = rep(LETTERS[1:4], times = 2), group_measure = c(rep('a_c',4),rep('b_c',4), c(rep('a_d',4),rep('b_d',4))),
value = sample(1:5, size = 16, replace = TRUE))
我想绘制x轴上的“ a”子组与y轴上的“ b”子组,并为每个度量绘制一个图。 像这样:
require(tidyr)
require(ggplot2)
require(patchwork)
data_foo_long <- data_foo %>% spread( group_measure, value)
p1 <- ggplot(data_foo_long, aes(x = a_c, y = b_c)) +
geom_point()
p2 <- ggplot(data_foo_long, aes(x = a_d, y = b_d)) +
geom_point()
p1 + p2
我看不到刻面(?)的方法。
但是我给人的印象是,当我采用长格式时,必须有一种更好的,类似ggplot的方式将一组中两个子组的结果相互绘制。不用说-有比这两个更多的措施。
P.S。如果有人对这个问题有更好的建议,请随时发表评论!
答案 0 :(得分:1)
这是一种方法。我将由您决定“更多措施”的效果如何。
使用tidyr::separate
将group_measure拆分为前缀和后缀,然后在前缀上扩展:
library(tidyverse)
data_foo %>%
separate(group_measure,
into = c("prefix", "suffix"),
sep = "_") %>%
spread(prefix, value)
id suffix a b
1 A c 2 2
2 A d 4 4
3 B c 2 5
4 B d 1 2
5 C c 3 5
6 C d 2 4
7 D c 5 4
8 D d 1 3
现在,您可以绘制a
与b
,并带有后缀:
data_foo %>%
separate(group_measure,
into = c("prefix", "suffix"),
sep = "_") %>%
spread(prefix, value) %>%
ggplot(aes(a, b)) +
geom_point() +
facet_wrap(~suffix)