识别数据框中的行对,其中日期在指定的天数内

时间:2016-03-18 21:38:25

标签: r

我尝试创建类似于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代码:

  • 博士。谁,Pepper博士(因为他们在6天之内看到米奇)
  • 博士。 Pepper,Strangelove博士(他们在28天内看到米奇)

我的实际数据集包含更多医生,患者和日期。我没有太多的计算机科学背景,但这似乎是一项计算上的繁重任务。

用简单的英语,我处理这个问题的方法是:

  1. 收集所有患者预约
  2. 对于每个约会日期,查找所有其他约会日的天数差异
  3. 为两次约会+ / - 30天的任何两次约会退还医生。
  4. 如果我能以任何方式改进我的问题,请告诉我。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用mapply来执行此操作,doctor将元素应用多元函数。在此处,它会遍历datedf列,将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()