我想编写一个函数,根据唯一值[id]子组内的所有其他记录,对数据集中的每条记录执行操作。我很新的R,但我知道,您可以根据使用下面的条件查询的记录的子集:寻找有效的方式来查询R或Stata中的子组观察
df$date[id == "1234"]
是否有可能取代“1234”从唯一的行衍生变量该功能正在运行?像...
df$date[id == df$id]
,这样它拉[index]行索引行[id]匹配[id]的[日期]的值。在实践中我会在一个循环,其中对x的值,我用可以查询特定[日期]值使用此:
df$date[id == df$id & order == x]
我的数据集必须为每个独特的[ID]多个记录。最终,我想将每个记录的[date_1]值与每个索引记录[id]子组中所有其他记录的[date_2]进行比较。数据看起来是这样的:
[id] | [order] | [date_1] | [date_2] |
--------------------------------------
A | 1 | 1/1 | 1/30 |
A | 2 | 1/5 | 1/5 |
A | 3 | 1/7 | 1/8 |
A | 4 | 1/9 | 1/9 |
-------------------------------------
B | 1 | 3/7 | 3/10 |
B | 2 | 4/1 | 4/9 |
--------------------------------------
虽然这可以通过每个唯一值[ID]循环,然后通过每个唯一值[为了]循环来完成,记录数(5-10万)证明该方法极其缓慢且资源密集。我想知道是否有一种更有效的方法来简单地遍历[order]值,然后同时计算每个记录的这个操作。
正如我所说的,我是新来的R,所以我不是万能的确定确切的语法,但我正在想象这样的事情:
for x = 1/max(order){
df$episode_start <- 1 if df$date_1 - df$date_2[id == df$id & order == x] > 1
}
我可以提供更多的细节这个项目的总体目标是否有用。简而言之,这些数据是医院记录,目标是确定开始一个新细分的记录,该记录被定义为在入院后1天内没有事先解除的相遇。数据变得棘手,因为存在重叠的记录(例如,如果病人是长期护理的住院病人,并且不得不去门诊就诊到急诊室) - 在上面的例子中,A2和A3看起来像是基于先前记录的出院日期[日期2]新的遭遇,但是A2,A3和A4都A1的跨度中发生的,所以结果应该是这样的:
[id] | [order] | [date_1] | [date_2] | [episode_start]
------------------------------------------------------
A | 1 | 1/1 | 1/30 | 1
A | 2 | 1/5 | 1/5 | 0
A | 3 | 1/7 | 1/8 | 0
A | 4 | 1/9 | 1/9 | 0
-----------------------------------------------------
B | 1 | 3/7 | 3/10 | 1
B | 2 | 4/1 | 4/9 | 1
------------------------------------------------------
在此先感谢。任何帮助或方向非常感谢。注意:我主要在Stata工作,并试图使用-bysort-命令来做类似的事情,但无济于事。也许以为R更适合这个。使用任一方式打开建议。
如果你要问的Stata过,这是乐观的假设,人们将阅读一个长期以R为中心的问题,然后翻译。有两个人都很流利,但你在这方面的成功几率很低。我建议删除Stata标签,并提一提Stata提出的单独Stata问题,如果您同时寻求Stata建议。当然,我不反对R的问题,但无法解决这个问题。 –