计算过去 7 天内温度超过 30C 的总天数 [以 R 为单位]

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

我有一个来自调查的数据集,第一列包含 ID,第二列包含格式为 yyyymmdd 的采访日期,范围从 2021 年 1 月 1 日到 2021 年 2 月 28 日。此外,温度数据分布在 59 列中,每列标记为 Xyyyymmdd,代表一月和二月的每一天。

现在,我需要计算每个人在过去 7 天内温度超过 30 摄氏度的总天数。值得注意的是,由于我的数据集中缺乏该时期的数据,因此今年的前 7 天不会有任何温度测量结果。

面试日期不连续,但温度列按日期顺序排列。

下面给出示例以了解数据的结构:

身份证 面试日期 X20210101 X20210102 X20210103
1 20210101 25 31 35
2 20210102 24 26 31
3 20210201 24 26 31
4 20210202 26 21 31

我正在使用 R。

r temperature
1个回答
0
投票

转向更长,转换为日期,然后对面试日期后 0-7 天内大于 30 度的行进行求和。

library(tidyr)
library(dplyr)
library(lubridate)

dat %>%
  pivot_longer(X20210101:X20210103, names_to = "Date", values_to = "Temp", names_prefix = "X") %>%
  mutate(across(`Interview date`:Date, ymd)) %>%
  summarize(
    HotDays = sum(Temp > 30 & `Interview date` - Date <= 7 & `Interview date` >= Date),
    .by = ID
  )

# note, OP’s example data doesn’t include any dates meeting criteria
# # A tibble: 4 × 2
#      ID HotDays
#   <dbl>   <int>
# 1     1       0
# 2     2       0
# 3     3       0
# 4     4       0
© www.soinside.com 2019 - 2024. All rights reserved.