欢迎光临散文网 会员登陆 & 注册

【Tidyverse优雅编程】跨表计算新列:变时间段内指标均值

2022-06-16 13:08 作者:张敬信老师  | 我要投稿

这是比较复杂的数据操作问题,来自:

R语言怎么计算任意两个日期之间的滑动平均?https://www.zhihu.com/question/537707630/answer/2529828627

1 问题转述

主表 df 是医疗档案,包括病人 ID,地理位置,体检时间1,体检时间2

现在想计算一个新列:病人所在地理位置体检时间1体检时间2的时间段内,平均的PM2.5值

需要的气象数据来自辅表 weather,包括地理位置,全部日期每一天的 PM2.5值

2 先编一个小的演示数据

主表,医疗档案:

辅表,气象数据:

3 解决问题

【程序说明】:

(1)先对辅表气象数据 weather ,关于位置 Location 来个分组嵌套(列表列,这样一个 Location 就占一行了,从而让操作逻辑更清晰:

data列中的元,比如第 1 个,是这个样子的:

(2)我们关心的是主表体检数据 df,在它基础上做计算,所以右连接 df 进来:

(3)关键步骤是,用 mutate 计算新列,需要在 data, T1, T2 这 3 列上做三元逐行迭代:

  • 根据 data$time 是否落在 T1, T2 构成的区间, 对 data 筛选行

  • 再取出 PM25 求平均,结果返回数值

这就需要 pmap_dbl ,把该迭代逻辑,写成一个三元函数,自变量分别用 ..1, ..2, ..3 指代。

具体实现,可以先把函数写出来,取出一组数据调试通过,再改写成 purrr 公式形式:

  

注:我开始想到的是,只在 data 上做一元 map 迭代, 直接使用 T1, T2,但是不行,因为这样每次迭代用的是整个 T1, T2 列向量。

再一个, 管道里面套管道话,我习惯内层管道用自带的管道符: |>

附录

我主张的数据编程思维

我的 R 语言新书:

https://zhuanlan.zhihu.com/p/198185888

已经进入出版流程,预计 22年8月 能与读者见面。更多相关资源请参阅:

https://zhuanlan.zhihu.com/p/467134727


【Tidyverse优雅编程】跨表计算新列:变时间段内指标均值的评论 (共 条)

分享到微博请遵守国家法律