r - R:如何计算数据框中唯一列-列匹配的出现次数和平均增量时间
问题描述
我有一个数据集,它代表患者在一年中在某种实践中对不同医生的访问。
例子-
doctor patient_no datetime
dr.kahn 1561 1/21/19 10:30:00
dr.gould 1397 2/06/19 12:30:00
dr.amoor 1596 2/11/19 9:00:00
dr.gould 995 10/07/19 12:30:00
dr.kahn 1561 10/14/19 9:30
我正在尝试创建一个新的数据框,其中每一行都是一个独特的医患配对,并显示患者就诊该医生的次数,以及该特定医患配对的平均就诊时间。因此,例如,如果患者 A 一年去 dr.kahn 4 次,那么患者 A 连续约见 dr.kahn 之间的平均时间是多少。
例子-
doctor patient_no number_of_visits avg_time_passed_between_appointments
dr.gould 1054 7 2 months 1 days 2:00:00
dr.gould 1099 2 5 months 10 days 00:00:00
dr.kahn 875 12 0 months 26 days 0:30:00
任何帮助,将不胜感激。谢谢!
解决方案
这是一个 dplyr 方法:
library(tidyverse)
df %>%
mutate(datetime = lubridate::mdy_hm(datetime)) %>%
group_by(doctor, patient_no) %>%
summarize(count = n(),
avg_days_between = (max(datetime) - min(datetime)) / lubridate::ddays(count - 1)) %>%
ungroup()
## A tibble: 4 x 4
# doctor patient_no count avg_days_between
# <chr> <dbl> <int> <dbl>
#1 dr.amoor 1596 1 NaN
#2 dr.gould 995 1 NaN
#3 dr.gould 1397 1 NaN
#4 dr.kahn 1561 2 266.
或者您可以计算每个滞后并使用不同的方法(例如中位数)来表征平均增量。
df %>%
group_by(doctor, patient_no) %>%
mutate(datetime = lubridate::mdy_hm(datetime),
# coalesce helps
days_since_last = coalesce(c(datetime - lag(datetime))/
lubridate::ddays(1), 0)) %>%
summarize(count = n(),
median_time_between = median(days_since_last))
## A tibble: 4 x 4
# Groups: doctor [3]
# doctor patient_no count median_time_between
# <chr> <dbl> <int> <dbl>
#1 dr.amoor 1596 1 0
#2 dr.gould 995 1 0
#3 dr.gould 1397 1 0
#4 dr.kahn 1561 2 133.
样本数据
df <- tibble::tribble(
~doctor, ~patient_no, ~datetime,
"dr.kahn", 1561, "1/21/19 10:30",
"dr.gould", 1397, "2/6/19 12:30",
"dr.amoor", 1596, "2/11/19 9:00",
"dr.gould", 995, "10/7/19 12:30",
"dr.kahn", 1561, "10/14/19 9:30"
)
推荐阅读
- c++ - 共享指针能否调用函数模板参数
- javascript - 如何对此进行验证,在使用 javascript 或 jquery 发布之前必须选择至少 2 个选项
- java - Maven:如何将本地 jar 打包到最终 jar 中?
- javascript - 为什么我传入的数组中的道具分散到它包含的对象中?
- java - 如何使用 mongodb Java 驱动程序更新旧文档?
- c# - Message.ToString() 从不同的线程调用时返回不同的值
- docker - Ubuntu 服务器上的 Groovy 脚本 - 无法解析类
- sql - 没有重叠日期的 SQL 分组结果
- python - 是否可以将 nltk.tree.Tree.draw() 输出写入文件
- c# - Sqlite Like 查询 xamarin 表单