【问题标题】:How do I subset by the ranges of two variables? [duplicate]如何按两个变量的范围进行子集化? [复制]
【发布时间】:2019-04-03 09:49:59
【问题描述】:

我有两个连续变量光和温度,我正在研究针对这些变量的光合作用速率。

我希望将我的数据拆分/子集为小范围的光和温度,然后我将针对光合作用进行绘图。

我想知道如何将我的数据拆分为这些光照和温度范围组合。例如,我想要以下内容:

数据集 1:(光照 >100 和 15 和

数据集2:(光 >100 & 20 和

...等,将在每个光照范围和每个温度范围内继续。

我想指定我只对按温度和光线对我的数据进行子集感兴趣。 这是因为我将通过另一个测量变量(光合作用)绘制该数据集中的数据。我不想绘制光或温度本身。

我的结果:计算这些不同微气候范围内两种处理(环境 CO2 和升高的 CO2)的平均光合作用。

到目前为止,我已经尝试过: 子集() %在范围内% %之间%

感谢任何帮助。

【问题讨论】:

  • 相当广泛的问题。能否请您付出一些努力并给MVCE?
  • cut 函数可能就是您想要的?
  • @jay.sf 我没有任何代码,这是我的问题。我可以提供一些数据,但我真的不知道使用什么代码将我的数据子集到这些部分中。

标签: r ggplot2 subset between


【解决方案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)

【讨论】:

  • @Autumnoak,这对你有用吗?我认为答案与链接帖子中的答案有很大不同,因为这专门处理 ggplot2 中的实现
  • 感谢您的回复。我对此很陌生,所以请原谅这个愚蠢的问题......但是我在哪里/如何使用我自己的数据集。我不确定它在代码中的位置。提前致谢。
  • df 是您数据的占位符; df_cat 是您编辑的数据的占位符,已根据您的光线和温度范围组合进行剪切。
  • 非常感谢,我会看看如何。
猜你喜欢
  • 2018-10-02
  • 2020-06-13
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
相关资源
最近更新 更多