Как выполнить подмножество диапазонов двух переменных?

У меня есть две непрерывные переменные Свет и Температура, и я изучаю скорости фотосинтеза в зависимости от этих переменных.

Я хочу разделить / разделить мои данные на небольшие диапазоны света и температуры, с которыми я затем буду строить фотосинтез.

Мне было интересно, как я могу разделить свои данные на эти комбинации диапазона света и температуры. Например, я хотел бы следующее:

Набор данных 1: (свет >100 и ‹200) и (температура >15 и ‹20)

Набор данных 2: (свет >100 и ‹200) и (температура >20 и ‹25)

... и т. д., которые будут продолжены для каждого диапазона света и каждого диапазона температур.

Я хочу указать, что меня интересует только подмножество моих данных по температуре и освещению. Это потому, что я буду отображать данные в этом наборе данных с помощью другой измеряемой переменной (фотосинтез). Я не собираюсь рисовать сам свет или температуру.

Мой результат: Рассчитайте средний фотосинтез в двух обработках (окружающий CO2 и повышенный CO2) в этих различных диапазонах микроклимата.

До сих пор я пробовал: subset() %inrange% %between%

Любая помощь приветствуется.


person Autumnoak    schedule 03.04.2019    source источник
comment
Довольно широкий вопрос. Не могли бы вы приложить некоторые усилия и дать MVCE?   -  person jay.sf    schedule 03.04.2019
comment
Функция cut может быть тем, что вы ищете?   -  person A. Stam    schedule 03.04.2019
comment
@ jay.sf У меня нет кода, это моя проблема. Я могу предоставить некоторые данные, но я действительно не знаю, какой код использовать для подмножества моих данных в этих разделах.   -  person Autumnoak    schedule 03.04.2019


Ответы (1)


Используя базовую функцию cut и функцию ggplot facet_wrap, вы можете делать то, что вам нужно, а также иметь гибкость, позволяющую опробовать несколько аранжировок без увеличения количества фреймов данных.

library(tidyverse)
df <- expand.grid(light = seq(100,300, by = 25),
                 temperature = seq(15,25, by = 2))

df_cat <- df %>%
  mutate(light.level = cut(light, 
                           breaks = c(100,200,300), 
                           include.lowest = T, 
                           labels = c("dim", "bright")),
         temperature.level = cut(temperature, 
                                 breaks = c(15,20,25), 
                                 include.lowest = T, 
                                 labels = c("cool", "warm")))

ggplot(df_cat, aes(x = light, y = temperature, colour = temperature.level, shape = light.level)) +
  geom_point() +
  facet_wrap(~temperature.level + light.level)

Облицовка лица на основе значений освещенности и температуры

person RDavey    schedule 03.04.2019
comment
@Autumnoak, тебе помогло? Я думаю, что ответ достаточно отличается от ответов в связанном посте, поскольку он касается именно реализации в ggplot2. - person RDavey; 09.04.2019
comment
Благодарю за ваш ответ. Я очень новичок в этом, поэтому, пожалуйста, извините за глупый вопрос... Но где/как я могу использовать для этого свой собственный набор данных. Я не уверен, где в коде он должен быть расположен. Заранее спасибо. - person Autumnoak; 06.09.2019
comment
df — это заполнитель для ваших данных; df_cat — это заполнитель для ваших отредактированных данных, которые были вырезаны в соответствии с вашими комбинациями диапазона освещения и температуры. - person RDavey; 06.09.2019
comment
Большое спасибо, посмотрю, как у меня дела. - person Autumnoak; 06.09.2019