假设我在两个实验中测量了一些值,R中的一个玩具示例是:
set.seed(9)
df <- data.frame(
exp=c(rep(1,10), rep(2,10)),
value=runif(20,0,3))
然后我根据 value
分配分类变量 level
:
require("dplyr")
df <- df %>% mutate(level = ifelse(value<1, "low", ifelse(value>2, "high", "intermediate")))
我可以为两个 exp
组显示 value
的 geom_point()
geom( ggplot2
包):
require("ggplot2")
ggplot(df, aes(x=factor(exp), y=value))+geom_point()
我的问题是:如何通过 level
将 facet_wrap()
分解为显示,以便得到 geom_point()
的3x3图表,其中 level
的九个组合为 exp
(例如"high","intermediate"和"low"垂直,用于实验1和水平实验2.换句话说,左上图是 value
,它们是实验1和2中的"high";第一行第二列图是实验1中的"high"和实验2中的"intermediate"等 . 我可以在ggplot2调用中以某种方式使用 group_by()
,还是我必须使 level.exp1
和 level.exp2
变量面对?
更新:似乎我没有正确解释它,所以澄清我需要的东西:我想 facet_wrap()
而不是用不同的 filter()
条件重复这个代码9次(即对于实验1和2中的 level
的所有9种组合):
df %>% filter((exp==1 & level=="high") | (exp==2 & level=="high")) %>%
ggplot(aes(x=factor(exp), y=value))+geom_point()
手工制作的手工制作与上面的 df
无关,并带有假传说可能会给人一种我想要的印象:
必须有一个温和的解决方案 - 我无法弄清楚 dcast()
解决方案 .