假设我在两个实验中测量了一些值,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 组显示 valuegeom_point() geom( ggplot2 包):

require("ggplot2")
ggplot(df, aes(x=factor(exp), y=value))+geom_point()

我的问题是:如何通过 levelfacet_wrap() 分解为显示,以便得到 geom_point() 的3x3图表,其中 level 的九个组合为 exp (例如"high","intermediate"和"low"垂直,用于实验1和水平实验2.换句话说,左上图是 value ,它们是实验1和2中的"high";第一行第二列图是实验1中的"high"和实验2中的"intermediate"等 . 我可以在ggplot2调用中以某种方式使用 group_by() ,还是我必须使 level.exp1level.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 无关,并带有假传说可能会给人一种我想要的印象:

enter image description here
必须有一个温和的解决方案 - 我无法弄清楚 dcast() 解决方案 .