【发布时间】:2013-11-19 05:38:33
【问题描述】:
我有一个数据框,其中包含一些关于何时将线附加到 ID 的观察结果。 我需要每个 ID 连接线/导管的天数。
这是我的输出返回:
structure(list(ID = c(487622L, 487622L, 487639L, 487639L, 489027L,
489027L, 489027L, 491858L, 491858L, 491858L, 491858L, 491858L,
491858L), Line = c("Central Venous Line", "Central Venous Line",
"Central Venous Line", "Peripherally Inserted Central Catheter (PICC)",
"Haemodialysis Catheter", "Peripherally Inserted Central Catheter (PICC)",
"Haemodialysis Catheter", "Central Venous Line", "Haemodialysis Catheter",
"Central Venous Line", "Haemodialysis Catheter", "Central Venous Line",
"Peripherally Inserted Central Catheter (PICC)"), Start = structure(c(1362528000,
1363219200, 1362268800, 1363219200, 1364774400, 1365120000, 1365465600,
1364688000, 1364688000, 1365724800, 1365724800, 1366848000, 1369353600
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), End = structure(c(1362787200,
1363824000, 1363305600, 1363737600, 1365465600, 1366675200, 1365638400,
1365724800, 1365724800, 1366329600, 1366848000, 1367539200, 1369612800
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), Days = c("3.095138889",
"7.045138889", "11.87777778", "5.736111111", "7.850694444", "18.02083333",
"1.813888889", "12.32986111", "12.71388889", "6.782638889", "13.14027778",
"7.718055556", "3.397222222"), dateOrder = c(1L, 2L, 1L, 2L,
1L, 2L, 3L, 1L, 2L, 3L, 4L, 5L, 6L)), .Names = c("ID", "Line",
"Start", "End", "Days", "dateOrder"), row.names = 79:91, class = "data.frame")
这就是问题所在。 ID 是否有多个线/导管并不重要。我只需要获取每个 ID 的最早开始日期,每个 ID 的最晚结束日期,并计算每个 ID 连接线/导管的连续天数。
某些情况会混淆问题,例如ID 491858。此人在 2013 年 5 月 3 日删除了一行 (dateOrder = 5),并在 2013 年 5 月 24 日重新插入了 3 天多一点。
我打算如何处理这个问题是从 min(开始日期)和 max(结束日期)之间的连续时间天数中减去间隔(天数)。
数据集中有超过 20,000 条记录。
这是我到目前为止所做的:
将 DF 转换为基于 ID 的 DF 列表。 我打算对每个 DF 应用一个函数,如下所示:
如果每行的后续开始日期和上一个结束日期之间的时间差(天)超过 0,则将 TRUE 或某个任意列值添加到每个数据框。
function(y){
for (i in length(y)){
if(difftime(y$Start[i+1], y$End[i], units='days') > 0){
y$test <- TRUE}
}
}
任何帮助将不胜感激。
谢谢。
更新
忽略天数列。这是没有用的。我打算从独特案例中汇总月行数。
【问题讨论】: