Re: [问题] 如何找出每天最低温的时间

楼主: celestialgod (天)   2023-04-19 20:14:18
※ 引述《studioA (understand?)》之铭言:
: [问题类型]:
: 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
: [软件熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 我有一组1年8760笔 气温值数据 资料格式如下
: date hour air_Tempture
: 2021-01-01 00 15.28
: 2021-01-01 01 15.28
: 2021-01-01 02 14.28
: .
: .
: 2021-12-31 21 11.89
: 2021-12-31 22 12.00
: 2021-12-31 23 11.45
: 我想要找出每一天最低温以及最低温的发生时间
: 但我遇到一些问题 程式出错
: 还有有些天 最低温同时发生在连续时段
: 例如 2021-2-10 最低温是9.1℃ 但清晨3点~5点都是9.1℃
: 我如何挑出最接近黎明6时的时刻 例如上例的5点
: [程式范例]:
: test_data %>% group_by(date) %>%
: summarise( 'min_T' = min( air_Tempture ,na.rm = T ),
: "min_hh" = .[[which( min( air_Tempture ,na.rm = T ),hh]]
: [环境叙述]:
: R4.0.3
: [关键字]:
:
: 选择性,也许未来有用
:
我用data.table写了一下 主要是靠.SD去取值
如果是用dplyr应该可以用left_join去做
library(data.table)
set.seed(200)
startDate <- as.Date("2023-01-01")
numDates <- 31
DT <- data.table(
date = rep(seq(startDate, startDate+numDates-1, 1), each=24),
hour = rep(1:24, numDates),
temperature = sample.int(40, 24*numDates, TRUE)/10 + 18
)
tempDT <- DT[ , .SD[temperature == min(temperature)], by=.(date)]
outDT <- tempDT[ , .SD[which.min(abs(hour-6))], by=.(date)]
outDT
# tempDT
date hour temperature
1: 2023-01-01 23 18.1
2: 2023-01-02 21 18.3
3: 2023-01-03 14 18.1
4: 2023-01-03 15 18.1
5: 2023-01-04 17 18.2
6: 2023-01-05 18 18.3
7: 2023-01-06 5 18.2
# outDT
date hour temperature
1: 2023-01-01 23 18.1
2: 2023-01-02 21 18.3
3: 2023-01-03 14 18.1
4: 2023-01-04 17 18.2
5: 2023-01-05 18 18.3
6: 2023-01-06 5 18.2
如果想改成用dplyr的话 可以自行尝试看看 不行再上来发问吧~
作者: studioA (understand?)   2023-05-01 05:25:00
感谢 成功解决我的问题

Links booklink

Contact Us: admin [ a t ] ucptt.com