R在Databricks中的编码。
我想要date1条目之间的时间间隔(以小时为单位),按pid、med和date1排列。
我希望每个日期的事件序列中的最新date1条目可以手动调整为24小时。
队列是指pid、med和date1相同。
任何更改都将终止最后一个队列,hour_output == 24。
df
pid med date1
1 1 drugA 2023-02-02 09:00:00
2 1 drugA 2023-02-02 12:00:00
3 1 drugA 2023-02-02 14:00:00
4 1 drugB 2023-02-03 10:00:00
5 1 drugB 2023-02-03 18:00:00
尝试的脚本。
df1 <- df %>%
arrange(pid, med, date1) %>%
mutate(hours_output = as.numeric(difftime(lead(date1), date1, units = "hours")))
# Replace the last duration value with 24 hours
df1$hours_output[last(nrow(df1))] <- 24
df1 <- df1 %>% select(med, date1, hours_output)
head(df1)
实际产量
pid med date1 hours_output
1 1 drugA 2023-02-02 09:00:00 3.00
2 1 drugA 2023-02-02 12:00:00 2.00
3 1 drugA 2023-02-02 14:00:00 20.00
4 1 drugB 2023-02-03 10:00:00 8.00
5 1 drugB 2023-02-03 18:00:00 18.00 (18 hours to the next row - not shown)
期望输出
pid med date1 hours_output
1 1 drugA 2023-02-02 09:00:00 3.00
2 1 drugA 2023-02-02 12:00:00 2.00
3 1 drugA 2023-02-02 14:00:00 24.00
4 1 drugB 2023-02-03 10:00:00 8.00
5 1 drugB 2023-02-03 18:00:00 24.00
3条答案
按热度按时间nbewdwxp1#
由于您希望按患者和药物进行计算,因此应该使用
group_by
,这样差异就不会错误地计算出不同组之间的差异。我正在使用
.by=
,这是dplyr_1.1.0
的新特性;如果您有更早版本,那么显式使用group_by
:p3rjfoxz2#
我可以在Databricks中将其作为示例。
使用虚拟数据的工作示例
lrl1mhuk3#
下面的工作在虚拟数据(如在问题的顶部)时,在Databricks中使用。
提供所需的输出。
(Also,处理Databricks中的实际数据)