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