Проблемы такого рода можно решать с помощью функций, в которых гранулярность вопросов позволяет вам получить несколько запросов и, следовательно, несколько ответов.
Однако, как представляется, всегда есть случаи, когда один из них в конечном итоге имеет чтобы написать несколько мини-запросов, чтобы получить требуемый ответ.
Я включил сценарий, основанный на подходе «Tidyverse», я не гарантирую, не уверен, что он наиболее эффективен. Но принципы могут быть применены к каждому из ваших вопросов.
Преимущество этого подхода в том, что он идеально подходит для перехода к использованию с ggplot, если вы хотите включить отображение данных.
Я извините за то, что по своему опыту я не нашел простого способа сделать это.
library(dplyr)
library(tidyr)
library(stringr)
garden <- c(1,2,3,4,5,6,7,8,9,10) %>% as.numeric
apples <- c(1,0,0,0,1,0,0,NA,NA,1) %>% as.integer ()
cherries <- c(0,1,0,0,1,1,1,NA,NA,1) %>% as.integer ()
pears <- c(0,NA,1,0,0,1,1,1,0,0) %>% as.integer ()
veg_tomatoes <- c(0,0,0,0,1,0,0,1,0,NA) %>% as.integer ()
veg_onions <- c(0,0,0,0,0,1,1,0,0,0) %>% as.integer ()
veg_peas <- c(0,0,0,0,0,0,0,0,0,1) %>% as.integer ()
veg_beans <- c(0,0,0,0,0,0,0,1,0,1) %>% as.integer ()
garden <- data.frame(garden,apples,cherries,pears,veg_tomatoes,veg_onions,veg_peas,veg_beans)
g <-
garden %>%
pivot_longer(cols = apples:veg_beans, names_to = "plant", values_to = "pres") %>%
mutate(type = case_when(str_detect(plant, "veg") ~ "veg",
TRUE ~ "tree"),
plant = str_remove(plant, "veg_"))
# Now you can carry out all the analysis you want
# a) Count the number and percentage of gardens with one sort of fruit tree or one sort of vegetable only (no other fruits, no other vegetables)
q_a <-
g %>%
group_by(garden, type) %>%
summarise(sum_type = sum(pres, na.rm = TRUE)) %>%
pivot_wider(names_from = type, values_from = sum_type) %>%
mutate(type_nr = sum(tree, veg)) %>%
filter(type_nr == 1) %>%
ungroup() %>%
summarise(count = n())
q_a
# This gives you the number of gardens which meet your criteria
total_gardens <- 10
q_a_pc <- paste0(q_a * 100 / total_gardens, "%")
q_a_pc