person_id  diag_date concept_id  event diff_prev_event
1:         1 2012-01-15    4265600 comorb         NA secs
2:         1 2012-01-15     201820 comorb          0 secs
3:         1 2012-03-15    4265600 comorb    5184000 secs
4:         2 2012-03-15     201820 comorb         NA secs
5:         2 2012-06-22     201820 comorb    8553600 secs
6:         2 2012-06-22    4265600 comorb          0 secs

我试图计算每个人自上次活动以来的天数.我遇到了两个问题.

  1. 时差以秒为单位显示.我需要休息几天.(5184000秒=30天)
  2. 如果两天是相同的日期,那么第二天显示0,此时它应该查看不同的日期.第5行和第6行的日期相同,因此它们的日期差相同.

这是我试过的代码:

dt[order(diag_date),diff_prev_event := difftime(diag_date, lag( diag_date)), by = c("person_id") ]

推荐答案

指定units

library(数据.table)
dt[order(diag_date),diff_prev_event := difftime(diag_date, 
     lag( diag_date), units = 'days'), by = c("person_id") ]

然后,我们按"person_id"和"diag_date"分组,如果有多行,则将值更改为max

dt[, diff_prev_event := if(.N > 1) max(diff_prev_event, 
    na.rm = TRUE) else diff_prev_event, .(person_id, diag_date)]
> dt
   person_id  diag_date concept_id  event diff_prev_event
       <int>     <Date>      <int> <char>      <difftime>
1:         1 2012-01-15    4265600 comorb          0 days
2:         1 2012-01-15     201820 comorb          0 days
3:         1 2012-03-15    4265600 comorb         60 days
4:         2 2012-03-15     201820 comorb         NA days
5:         2 2012-06-22     201820 comorb         99 days
6:         2 2012-06-22    4265600 comorb         99 days

-输出

数据

dt <- structure(list(person_id = c(1L, 1L, 1L, 2L, 2L, 2L), diag_date = structure(c(15354, 
15354, 15414, 15414, 15513, 15513), class = "Date"), concept_id = c(4265600L, 
201820L, 4265600L, 201820L, 201820L, 4265600L), event = c("comorb", 
"comorb", "comorb", "comorb", "comorb", "comorb")), row.names = c(NA, 
-6L), class = c("数据.table", "数据.frame"))

R相关问答推荐

R -创建一列,指示另一列是否具有相同的值

根据列中的数字移动单元格位置

R -模运算后的加法

是否可以 Select 安装不带文档的R包以更有效地存储?

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

单击 map 后,将坐标复制到剪贴板

R创建一个数据透视表,计算多个组的百分比

为什么当我try 在收件箱中使用合并功能时会出现回收错误?

在R中创建一个包含转换和转换之间的时间的列

为什么观察不会被无功值变化触发?

ggplot2中的X轴显示数值,单位为百,而不是十

移除仪表板Quarto中顶盖和车身之间的白色区域

如何在分组条形图中移动相关列?

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

QY数据的处理:如何定义QY因素的水平

随机森林的带Shap值的蜂群图

数值型数据与字符混合时如何进行绑定

R-使用stri_trans_General()将其音译为德语字母

如何更改包中函数中的参数?

roxygen2正在处理太多的文件