根据r中的天气每小时数据计算霜冻变化天数(天数)

calculate number of frost change days (number of days) from the weather hourly data in r

我必须计算以下数据霜冻变化天数**(NFCD)**** 作为每周基础。
这意味着最低温度和最高温度超过 0°C 的天数。 假设我使用 1957-1980 年的每小时温度工作。

示例数据(几行看起来像):

Date    Time (UTC)  temperature 
1957-07-01  00:00:00    5
1957-07-01  03:00:00    6.2
1957-07-01  05:00:00    9
1957-07-01  06:00:00    10
1957-07-01  07:00:00    10
1957-07-01  08:00:00    14
1957-07-01  09:00:00    13.2
1957-07-01  10:00:00    15
1957-07-01  11:00:00    15
1957-07-01  12:00:00    16.3
1957-07-01  13:00:00    15.8

预期数据:

year month  week    NFCD 
1957    7   1        1 
1957    7   2        5 
dat <- data.frame(date=c(rep("A",5),rep("B",5)), time=rep(1:5, times=2), temp=c(1:5,-2,1:4))
dat
#    date time temp
# 1     A    1    1
# 2     A    2    2
# 3     A    3    3
# 4     A    4    4
# 5     A    5    5
# 6     B    1   -2
# 7     B    2    1
# 8     B    3    2
# 9     B    4    3
# 10    B    5    4
aggregate(temp ~ date, data = dat, FUN = function(z) min(z) <= 0 && max(z) > 0)
#   date  temp
# 1    A FALSE
# 2    B  TRUE

(然后将 temp 重命名为 NFCD

使用 r2evans 答案中的数据,您还可以使用 tidyverse 逻辑:

library(tidyverse)
dat %>%
  group_by(date) %>%
  summarize(NFCD = min(temp) < 0 & max(temp) > 0)

给出:

# A tibble: 2 x 2
  date  NFCD 
  <chr> <lgl>
1 A     FALSE
2 B     TRUE