Facet wrap with more than one variable

Viewed 27

I am trying to facet wrap with two variables, but once I add the variable "Group" I get this error: Error in sanitise_dim(nrow) : object 'Group' not found

Here is my dataframe:

dput(df)
structure(list(Condition = c("A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B"), Gate = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 1L, 1L, 2L, 2L, 
3L, 3L, 4L, 4L, 5L, 5L), .Label = c("Gate 0", "Gate 1", "Gate 2", 
"Gate 3", "Full"), class = "factor"), Modality = c("AO", "AO", 
"AO", "AV", "AV", "AV", "AO", "AO", "AO", "AV", "AV", "AV", "AO", 
"AO", "AO", "AV", "AV", "AV", "AO", "AO", "AO", "AV", "AV", "AV", 
"AO", "AO", "AO", "AV", "AV", "AV", "AO", "AV", "AO", "AV", "AO", 
"AV", "AO", "AV", "AO", "AV"), Participant = c(1, 2, 4, 1, 2, 
4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 
4, 1, 2, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), Group = c("Group 2", 
"Group 1", "Group 2", "Group 2", "Group 1", "Group 2", "Group 2", 
"Group 1", "Group 2", "Group 2", "Group 1", "Group 2", "Group 2", 
"Group 1", "Group 2", "Group 2", "Group 1", "Group 2", "Group 2", 
"Group 1", "Group 2", "Group 2", "Group 1", "Group 2", "Group 2", 
"Group 1", "Group 2", "Group 2", "Group 1", "Group 2", "Group 1", 
"Group 1", "Group 1", "Group 1", "Group 1", "Group 1", "Group 1", 
"Group 1", "Group 1", "Group 1"), Accuracy = c(0, 0.5, 0, 0, 
0, 0.3, 0, 0.5, 0.7, 0.1, 0.5, 0.7, 0.2, 0.8, 0.7, 0.2, 0.8, 
0.9, 0.2, 0.9, 0.9, 0.4, 0.9, 1, 0.4, 1, 0.9, 0.3, 1, 1, 0, 0, 
0.2, 0.2, 0.2, 0.4, 0.6, 0.7, 0.6, 0.7), se = c(0, 0.166666666666667, 
0, 0, 0, 0.152752523165195, 0, 0.166666666666667, 0.152752523165195, 
0.1, 0.166666666666667, 0.152752523165195, 0.133333333333333, 
0.133333333333333, 0.152752523165195, 0.133333333333333, 0.133333333333333, 
0.1, 0.133333333333333, 0.1, 0.1, 0.163299316185545, 0.1, 0, 
0.163299316185545, 0, 0.1, 0.152752523165195, 0, 0, 0, 0, 0.133333333333333, 
0.133333333333333, 0.133333333333333, 0.163299316185545, 0.163299316185545, 
0.152752523165195, 0.163299316185545, 0.152752523165195)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -40L), groups = structure(list(
    Condition = c("A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
    "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", 
    "B", "B", "B", "B", "B", "B", "B"), Gate = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 
    3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 1L, 
    1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 5L), .Label = c("Gate 0", 
    "Gate 1", "Gate 2", "Gate 3", "Full"), class = "factor"), 
    Modality = c("AO", "AO", "AO", "AV", "AV", "AV", "AO", "AO", 
    "AO", "AV", "AV", "AV", "AO", "AO", "AO", "AV", "AV", "AV", 
    "AO", "AO", "AO", "AV", "AV", "AV", "AO", "AO", "AO", "AV", 
    "AV", "AV", "AO", "AV", "AO", "AV", "AO", "AV", "AO", "AV", 
    "AO", "AV"), Participant = c(1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 
    2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 
    4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3), .rows = structure(list(
        1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
        14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 
        25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 
        36L, 37L, 38L, 39L, 40L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -40L), .drop = TRUE))

And here is the code I am running:

df%>%
  group_by(Condition, Gate = fct_inorder(Gate), Modality, Group) %>% 
  dplyr::summarize(Proportion_Correct = mean(Accuracy), #item-level: Accuracy = mean(Correct) --> participant-level: Proportion_Correct = mean(Accuracy)
                   standarderror = (sd(Accuracy, na.rm = TRUE)/sqrt(n()))) %>% 
  ggplot(aes(x = Gate, y = Proportion_Correct, color = Modality, group = Modality)) + 
  geom_line() + 
  geom_errorbar(aes(ymin = Proportion_Correct - standarderror, ymax = Proportion_Correct + standarderror), color = "Black", size = .15, width = .3) + 
  geom_point(size = 2)+ 
  scale_y_continuous(labels = scales::percent)+ 
  labs(y= "Accuracy", x = "Gate")+
  facet_wrap(~Condition, Group) + 
  theme_minimal() + 
  scale_color_brewer(palette = "Set1")+
  ggtitle("Performance")

When I run this code, I get that error. I am hoping to get three graphs side by side. There should be two conditions for Group 1, and only one condition for Group 2. Any ideas are appreciated. Thank you!!

1 Answers

I believe that in the facet wrap condition, when you use multiple variable names you separate them with "+" sign and not a comma. So, your code should be:

df%>%
  group_by(Condition, Gate = fct_inorder(Gate), Modality, Group) %>% 
  dplyr::summarize(Proportion_Correct = mean(Accuracy), #item-level: Accuracy = mean(Correct) --> participant-level: Proportion_Correct = mean(Accuracy)
                   standarderror = (sd(Accuracy, na.rm = TRUE)/sqrt(n()))) %>% 
  ggplot(aes(x = Gate, y = Proportion_Correct, color = Modality, group = Modality)) + 
  geom_line() + 
  geom_errorbar(aes(ymin = Proportion_Correct - standarderror, ymax = Proportion_Correct + standarderror), color = "Black", size = .15, width = .3) + 
  geom_point(size = 2)+ 
  scale_y_continuous(labels = scales::percent)+ 
  labs(y= "Accuracy", x = "Gate")+
  facet_wrap(~Condition+Group) + 
  theme_minimal() + 
  scale_color_brewer(palette = "Set1")+
  ggtitle("Performance")

enter image description here

Related