gpt4 book ai didi

R数据表间隔

转载 作者:行者123 更新时间:2023-12-01 11:29:04 26 4
gpt4 key购买 nike

DT 是带有 POSIXct 列“date_and_time”的 data.table。如何使用 data.table 语法添加一个 3 级因子列,指示每个“date_and_time”实例属于哪个类次?

DT <- data.table(date_and_time = as.POSIXct(
c("1997-07-01 23:00",
"1999-01-01 02:05",
"2006-01-01 12:00",
"2009-01-01 22:30",
"2012-07-01 03:59"), required.components = 5L)
)
shifts_delimiter = c("00:00", "08:00", "16:00")

要求的结果:

> DT
date_and_time shift
1: 1997-07-01 23:00:00 3
2: 1999-01-01 02:05:00 1
3: 2006-01-01 12:00:00 2
4: 2009-01-01 22:30:00 3
5: 2012-07-01 03:59:00 1

最佳答案

您可以将 data.table 包提供的 ITime 类与 findInterval 结合使用

shifts_delimiter = c("00:00", "08:00", "16:00")
DT[, Shift := findInterval(as.ITime(date_and_time), as.ITime(shifts_delimiter))]
DT
# date_and_time Shift
# 1: 1997-07-01 23:00:00 3
# 2: 1999-01-01 02:05:00 1
# 3: 2006-01-01 12:00:00 2
# 4: 2009-01-01 22:30:00 3
# 5: 2012-07-01 03:59:00 1

另一种选择是使用整数作为有序间隔,并使用内置的 hour 函数和 findInterval

shifts_delimiter = c(8L, 16L, 24L)
DT[, Shift2 := findInterval(hour(date_and_time), shifts_delimiter) + 1L]
DT
# date_and_time Shift Shift2
# 1: 1997-07-01 23:00:00 3 3
# 2: 1999-01-01 02:05:00 1 1
# 3: 2006-01-01 12:00:00 2 2
# 4: 2009-01-01 22:30:00 3 3
# 5: 2012-07-01 03:59:00 1 1

关于R数据表间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34747614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com