【问题标题】:Create bin column based on two other columns基于其他两列创建 bin 列
【发布时间】:2018-01-26 13:51:59
【问题描述】:

我需要创建一个包含垃圾箱的列,我发现 this 以前的帖子对此很有帮助。但是,我要创建的 bin 不仅仅是另一列的分组区间,还需要考虑第二列的阶乘数据。更准确地说,我想按季节和年份对渔获量进行分组,即它们被捕获的月份分为“冷”(11 月至 2 月)、“温暖”(3 月至 6 月)和“温暖”(7 月)组-Oct) 和相关年份。

fish <- data.frame(month = sample(1:12,36,replace=T), year = sample(c(2015,2016,2017),36,replace=T))
fish <- fish[order(fish$year,fish$month),]

library(dplyr)
lev <- c(-Inf, 2, 6, 10, Inf)
lab <- c("cold", "warmer", "warm", "cold")
fish <- mutate(fish,season = cut(month, lev, labels = lab))

上面的代码(基于前面提到的帖子)将创建一个 bin 列。但是,我需要将“冷”组的 1 月/2 月部分与上一年相关联,即 2016 年 1 月/2 月应与 2015 年的“可以”组分组。任何帮助将不胜感激!

干杯

【问题讨论】:

    标签: r grouping cut dplyr bins


    【解决方案1】:

    这样就可以了:

    fish <- mutate(fish, season = case_when(month %in% c(1, 2, 11, 12) ~ "cold",
                                            month %in% c(3, 4, 5, 6) ~ "warmer",
                                            TRUE ~ "warm"))
    

    【讨论】:

    • phiver,谢谢你的回答,但我认为你的代码产生了我已经拥有的东西。再三考虑,我认为我需要创建第二个“年”列,从 3 月到 2 月。
    【解决方案2】:

    本来可以早点想到的:只需添加另一个“年份”列,其中 Jan/Feb 的值为“year”-1 即可。

    fish <- mutate(fish,seasonYY = ifelse(fish$month==1|fish$month==2,fish$year-1,fish$year))
    

    以后的分析可以使用“new.year”和“season”来划分正确的渔获量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      • 2021-12-27
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多