【问题标题】:Removing duplicates based on greatest value of another columns [duplicate]根据另一列的最大值删除重复项[重复]
【发布时间】:2018-05-27 18:48:42
【问题描述】:

每学期为每位学生购买多张停车证。试图根据他们拥有最长的许可证来删除它们。结合学生 ID 和学期以制作唯一 ID。数据框中有 80 列,但为此我只处理 2 列。

UniqueID       PermitDuration
01-Fall16              10
01-Fall17              11
01-Fall17              5
01-Fall17              11
02-Fall16              5
02-Fall16              12
02-Fall17              2
02-Fall17              6

我想根据 PermitDuration 中的最大值删除 UniqueID 的重复项。所需的数据框如下所示。

UniqueID       PermitDuration
01-Fall16              10
01-Fall17              11
02-Fall16              12
02-Fall17              6

【问题讨论】:

  • 来自here: unique(subset(df, PermitDuration==ave(PermitDuration, UniqueID, FUN=max)))
  • 仍在尝试确定共同元素,但该解决方案仅删除了少数重复项,而将大部分重复项留在了后面。

标签: r duplicates


【解决方案1】:

使用 dplyr:

df %>% distinct %>% group_by(UniqueID) %>% top_n(1, PermitDuration)

【讨论】:

    【解决方案2】:

    您可以使用max。这是一个使用data.table的示例:

    > library(data.table)
    > setDT(mydf)[, PermitDuration[max(PermitDuration)], UniqueID]
        UniqueID V1
    1: 01-Fall16 10
    2: 01-Fall17 11
    3: 02-Fall16 12
    4: 02-Fall17  6
    

    甚至aggregate:

    aggregate(PermitDuration ~ UniqueID, mydf, max)
    

    【讨论】:

    • x[max(x)]x[which.max(x)] ?我没有尝试读取 OP 的数据,但前者似乎很奇怪。
    • 是否有一个参数可以传递给聚合方法,允许我保留其他 78 列(变量)?
    • 能够通过其他一些帖子和您的帮助来回答这个问题。最终使用 as.data.table(df)[ , .SD[which.max(PermitDuration)], by= UniqueID]
    猜你喜欢
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 2018-12-01
    • 2017-07-28
    • 2021-12-02
    • 2019-02-12
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多