【问题标题】:Aggregate data with custom function使用自定义函数聚合数据
【发布时间】:2017-02-14 02:31:19
【问题描述】:

我有一个如下所示的 data.table:

Category   Sub-Category     Status
   A            1            Draft
   A            2            Draft
   A            3            Draft
   A            4            Draft
   A            5            Draft
   A            6            Draft
   B            1            Final
   B            2            Draft
   B            3            Final
   B            4            Final
   C            1            Final
   C            2            Final
   C            3            Final
   C            4            Final
   C            5            Final

我想按类别汇总这些数据,以便:

  1. 如果所有子类别的状态均为“草稿”,则状态为“草稿”
  2. 如果子类别的状态是“草稿”和“最终”的混合状态,则状态为“混合”
  3. 如果所有子类别的状态为“Final”,则状态为“Final”

最终输出将如下所示:

Category   Status
   A       Draft
   B       Hybrid
   C       Final

我知道如果我应用的函数是 sum,我可以这样做:

df <- aggregate(Status ~ Category, data = df, sum)

对我来说问题是这需要某种自定义函数

【问题讨论】:

  • 那么为什么不能像sum 那样编写自定义函数然后应用它呢?写出来应该不会超过2-3分钟,因为你的逻辑很简单。

标签: r group-by aggregate


【解决方案1】:

给你,试试这个..

customFunc <- function(x){

    if (length(unique(as.character(x))) == 2){
        return('Hybrid')
    }

    else {
        return(unique(as.character(x)))
    }

}

df <- aggregate(Status ~ Category, data = df, customFunc)

【讨论】:

  • 谢谢,效果很好。此外,打印独特的数字是一个非常优雅的解决方案。
猜你喜欢
  • 1970-01-01
  • 2015-07-04
  • 2019-11-05
  • 1970-01-01
  • 2019-03-25
  • 2016-01-30
  • 2012-01-19
  • 1970-01-01
  • 2016-06-29
相关资源
最近更新 更多