根据R数据表中的最小和最大时间戳在一列中选择一个值。

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

我有一个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 timestampstatus == 0type == A01-02-2020 08:19:34. 相应的数值是3。

如果我想约会 02-02-2020那么 minimum timestampstatus == 0type == A02-02-2020 10:29:15. 相应的数值是6。

我应该能够提供所需的日期。

r data.table
1个回答
1
投票

你可以先创建一个 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))
© www.soinside.com 2019 - 2024. All rights reserved.