【问题标题】:Subset a data frame for date and keep all later dates in data.table将数据框设置为日期的子集,并将所有以后的日期保留在 data.table 中
【发布时间】:2020-11-25 20:55:00
【问题描述】:

我有以下data.table

DT <- data.table(id=c(1,1,1,2,2,2,2),
                 date1=c("2013-11-22","2013-11-22","2013-11-22","2015-12-22","2015-12-22","2010-12-22","2010-12-22"),
                 variable=c(20.5,22.1,21.9,30.3,30.5,28.7,27.9))

我只想保留日期较晚的行以最终拥有此数据框

id      date1 variable
1:  1 2013-11-22     20.5
2:  1 2013-11-22     22.1
3:  1 2013-11-22     21.9
4:  2 2015-12-22     30.3
5:  2 2015-12-22     30.5

我正在使用 data.table 并尝试过类似的方法

setDT(DT)[,.SD[which.max(date1)],by='id']

但它只给我每个id 一行的输出。我想保留所有以后日期的行。

【问题讨论】:

  • Svenja,你知道堆栈礼仪是接受你的问题的好答案吗?这样做不仅为回答者提供了一些分数,而且还为有类似问题的读者提供了一些结束。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)请考虑此问题和过去的问题accepting 答案。

标签: r date data.table subset


【解决方案1】:

你可以这样做:

DT[, .SD[date1 == max(date1)], by = 'id']

输出:

   id      date1 variable
1:  1 2013-11-22     20.5
2:  1 2013-11-22     22.1
3:  1 2013-11-22     21.9
4:  2 2015-12-22     30.3
5:  2 2015-12-22     30.5

【讨论】:

    【解决方案2】:

    我们可以使用.I

    DT[DT[, .I[date1 == max(date1)], id]$V1]
    #  id      date1 variable
    #1:  1 2013-11-22     20.5
    #2:  1 2013-11-22     22.1
    #3:  1 2013-11-22     21.9
    #4:  2 2015-12-22     30.3
    #5:  2 2015-12-22     30.5
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      相关资源
      最近更新 更多