我尝试创建类似于CMS发布referral data的方式的数据集。简而言之,如果两名医生在另一名医生的30天内看到同一患者,则他们会联系起来。
我有一个包含患者,医生和预约日期的数据集,例如:
df <- data.frame(
doctor = c("Dr. Who", "Dr. Pepper", "Dr.Bob", "Dr. Strangelove"),
patient = c("Mickey", "Mickey", "Mickey", "Mickey"),
date = c("2015-01-15", "2015-01-21", "2015-04-01", "2015-02-18")
)
使用上面的数据集,我想写一些可以返回的R代码:
我的实际数据集包含更多医生,患者和日期。我没有太多的计算机科学背景,但这似乎是一项计算上的繁重任务。
用简单的英语,我处理这个问题的方法是:
如果我能以任何方式改进我的问题,请告诉我。谢谢。
答案 0 :(得分:1)
您可以使用mapply
来执行此操作,doctor
将元素应用多元函数。在此处,它会遍历date
和df
列,将paste( ... , collapse = ', ')
子集化为与30天内与该约会不同的医生相关联的医生。多个匹配项与df$linked_doc <- mapply(
function(doc, date){paste(
df[abs(date - df$date) < 30 & doc != df$doctor, 'doctor'],
collapse = ', ')},
df$doctor, df$date)
df
# doctor patient date linked_doc
# 1 Dr. Who Mickey 2015-01-15 Dr. Pepper
# 2 Dr. Pepper Mickey 2015-01-21 Dr. Who, Dr. Strangelove
# 3 Dr.Bob Mickey 2015-04-01
# 4 Dr. Strangelove Mickey 2015-02-18 Dr. Pepper
合并。
split
当然,还有其他方法可以做到这一点。如果您有多名患者,可以在申请该功能之前patient
onClick()
。