我有一个R数据表,其中有时间戳、状态、类型和值等列。
我需要选择时间戳为min(一天中的第一个),状态为1,类型为A时的值。
我试过: min(dt$timestamp[dt$status ==1 & dt$type == 'A']$value)
数据表 :
timestamp status type value
01-02-2020 08:09:10 1 A 2
01-02-2020 08:19:34 0 A 3
01-02-2020 08:34:10 0 A 4
01-02-2020 09:09:33 0 B 5
01-02-2020 10:09:10 1 B 2
02-02-2020 05:06:11 1 B 3
02-02-2020 08:09:10 1 A 4
02-02-2020 09:02:11 1 A 4
02-02-2020 10:29:15 0 A 6
预期输出:如果我想对日期 01-02-2020
那么 minimum timestamp
当 status == 0
和 type == A
是 01-02-2020 08:19:34
. 相应的数值是3。
如果我想约会 02-02-2020
那么 minimum timestamp
当 status == 0
和 type == A
是 02-02-2020 10:29:15
. 相应的数值是6。
我应该能够提供所需的日期。
你可以先创建一个 date
列,并根据条件过滤数值。
library(data.table)
want_date <- as.Date('2020-02-02')
setDT(df)[, date := as.Date(timestamp, "%d-%m-%Y %T")]
df[date == want_date,value[timestamp == min(timestamp[status == 0 & type == "A"])]]
#[1] 6
数据
df <- structure(list(timestamp = c("01-02-202008:09:10", "01-02-202008:19:34",
"01-02-202008:34:10", "01-02-202009:09:33", "01-02-202010:09:10",
"02-02-202005:06:11", "02-02-202008:09:10", "02-02-202009:02:11",
"02-02-202010:29:15"), status = c(1L, 0L, 0L, 0L, 1L, 1L, 1L,
1L, 0L), type = c("A", "A", "A", "B", "B", "B", "A", "A", "A"),
value = c(2L, 3L, 4L, 5L, 2L, 3L, 4L, 4L, 6L)), class = "data.frame",
row.names = c(NA, -9L))