r中最早的日期和ID的条件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r中最早的日期和ID的条件相关的知识,希望对你有一定的参考价值。
我想写一个条件,例如选择V2 == "B"
,但前提是"B"
根据它在id
(V1
)所属的日期是最老的条件。
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的条件的主要内容,如果未能解决你的问题,请参考以下文章