我有一个来自调查的数据集,第一列包含 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。
转向更长,转换为日期,然后对面试日期后 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