r中最早的日期和ID的条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r中最早的日期和ID的条件相关的知识,希望对你有一定的参考价值。

我想写一个条件,例如选择V2 == "B",但前提是"B"根据它在idV1)所属的日期是最老的条件。

library(data.table)
dt <- data.table(id <- c(rep(1,3),
                         rep(2,2),
                         rep(3,2)),
                 condition <- c(rep("A",2), "B",
                                "B","B",
                                "B","A"),
                 dates <- c("2018-01-20", "2018-01-03","2017-01-01",
                            "2018-05-02", "2018-04-01",
                            "2018-05-01", "2018-01-01")
                 )

# Result
#   V1 V2         V3
#1:  1  A 2018-01-20
#2:  1  A 2018-01-03
#3:  1  B 2017-01-01
#4:  2  B 2018-05-02
#5:  2  B 2018-04-01
#6:  3  B 2018-05-01
#7:  3  A 2018-01-01

想要的结果应该是这个:

#   V1 V2         V3
#3:  1  B 2017-01-01
#5:  2  B 2018-04-01

您可以看到,第6行不是我最终想要的结果,因为"B"不是最旧的条件,但是"A"是。

谢谢

答案

我们可以创建索引并使用该索引提取

dt[dt[,  .(ind = .I[V2 == 'B' & V3 == min(as.Date(V3))]), V1]$ind]
#   V1 V2         V3
#1:  1  B 2017-01-01
#2:  2  B 2018-04-01

或更紧凑地

 dt[, .SD[V3 == min(as.Date(V3)) & V2 == 'B'], by = V1]
另一答案
dt[order(dates), if(first(V2) == 'B') head(.SD, 1), V1]
#    V1 V2         V3
# 1:  1  B 2017-01-01
# 2:  2  B 2018-04-01

以上是关于r中最早的日期和ID的条件的主要内容,如果未能解决你的问题,请参考以下文章

如何返回最早日期的记录?

电源查询:如果满足条件,则查找最小日期

常用python日期日志获取内容循环的代码片段

如何找到最高(最新)和最低(最早)日期 [R]

如何检索每个不同 ID 的最早日期和状态

如何从片段中调用 getSupportFragmentManager()?