【发布时间】:2019-03-06 17:39:45
【问题描述】:
我是 R 和 data.table 的新手,我的大脑天生就可以在 SAS 中思考,所以我正在寻找解决以下问题的方法。
我有跨越“从”到“到”一段时间的健康账单。我想创建招生,我标记所有连续的账单(即它们之间不超过一天)。在下面的示例数据中,患者、来自和直通列是我们开始的内容,而承认列是我要添加的内容。
Name From Thru Admit
John 1/1/18 1/7/18 1
John 1/8/18 1/15/18 1
John 1/18/18 1/20/18 2
Jane 1/1/18 1/3/18 3
Jane 1/5/18 1/8/18 4
Jane 1/10/18 1/17/18 5
Jane 1/12/18 1/17/18 5
Jane 1/18/18 1/24/18 5
Frank 2/1/18 2/1/18 6
Frank 2/1/18 2/10/18 6
Frank 2/3/18 2/3/18 6
Frank 2/4/18 2/4/18 6
Frank 2/5/18 2/5/18 6
我更喜欢面向 data.table 的解决方案。我需要一些提示 - 在 SAS 中我确切地知道如何做到这一点,但我正在尝试学习新的东西。
谢谢。
【问题讨论】:
-
您需要使用日期格式(请参阅
?Date或?IDate),然后可以执行DT[, g := .GRP, by=.(Name, cumsum(From - shift(Thru) > 1))]之类的操作 -
@josemz 的代码仍然给出了上面的 Admit 列,对吧?也许如果你消除倒数第二行..?
标签: r data.table