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

问题描述 投票:0回答:2

我想写一个条件,例如选择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"是。

谢谢

r data.table
2个回答
1
投票

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

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]

0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.