【问题标题】:Define the variable to drop among ID duplicates in data.table定义要在 data.table 中的 ID 重复项中删除的变量
【发布时间】:2020-08-04 23:25:06
【问题描述】:

我有以下数据集

DT <- data.table(
      id = c(1,2,3,4,4,5,6,6,7),
      date  = c("2013-11-22","2017-01-24","2020-02-10","2011-01-03"
               ,"2011-01-03","2012-04-03","2010-09-03","2010-09-03"
               ,"2010-05-03"),                         
      status = c("Never","Current","Former",NA,"Former"
                , NA,"Never","Former","Current")
     )

我想创建一个唯一的id 并删除重复项。

  • 应保留的id 行取决于status
  • 如果状态有NA 和非NA,我想保留非NA 观察。
  • 如果状态有FormerNever,我想保持Former观察。

下面的示例输出:

    id  date      status 
1:  1 2013-11-22   Never 
2:  2 2017-01-24 Current 
3:  3 2020-02-10  Former 
4:  4 2011-01-03  Former 
5:  5 2012-04-03    <NA> 
6:  6 2010-09-03  Former 
7:  7 2010-05-03 Current

原始数据集有更多的行和列,data.table 函数会节省时间。还有一些id 出现不止一次。我之前尝试过将id 保留为最新日期。但是,我有太多的“不适用”,并且在更早的日期有另一个状态条目。

如何为相同的id 定义应该保留哪个status

【问题讨论】:

  • 请在您提供的示例数据中包含您的预期输出。我不清楚“应保留的 id 行取决于状态。如果它是 NA 和 nonNA 状态,”。如果 whatNA 和非 NA 状态?
  • 输出应该是下面的id date status 1: 1 2013-11-22 Never 2: 2 2017-01-24 Current 3: 3 2020-02-10 Former 4: 4 2011-01-03 Former 5: 5 2012-04-03 &lt;NA&gt; 6: 6 2010-09-03 Former 7: 7 2010-05-03 Current
  • 请编辑帖子以显示该信息。

标签: r duplicates data.table


【解决方案1】:

我们可以用status 指定levels 创建一个factor,将它与“id”一起用于order,并通过“id”获取unique

library(data.table)
unique(DT[order(id, ordered(status, c("Former", "Current", "Never")))], by = 'id')

【讨论】:

    猜你喜欢
    • 2023-02-02
    • 2014-11-16
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多