【发布时间】:2021-10-11 13:20:59
【问题描述】:
我有一个如下的数据框:
ID DPREL Dt_biop
292 2012-06-11 2014-03-06
292 2013-01-10 2014-03-06
292 2015-05-21 2014-03-06
292 2017-09-05 2014-03-06
292 2012-06-11 2015-05-21
292 2012-09-07 2015-05-21
292 2012-09-07 2017-10-26
292 2013-01-10 2017-10-26
292 2015-05-21 2017-10-26
805 2013-09-09 2020-11-19
805 2020-03-01 2020-11-19
我需要添加一个新列“Diff”,它是每个 DPREL 和之前唯一活检日期 (Dt_biop) 之间的差异,而不是前一行。事实上,新列应该是这样的:
ID DPREL Dt_biop Diff
292 2012-06-11 2014-03-06
292 2013-01-10 2014-03-06
292 2015-05-21 2014-03-06
292 2017-09-05 2014-03-06
292 2012-06-11 2015-05-21 -633
292 2012-09-07 2015-05-21 -545
292 2012-09-07 2017-10-26 -986
292 2013-01-10 2017-10-26 -861
292 2015-05-21 2017-10-26 0
805 2013-09-09 2020-11-19
805 2020-03-01 2020-11-19
请注意,应根据每个 ID 创建差异列。我已经尝试了以下代码。
DATA2 <- DATA2 %>%
group_by(ID) %>%
arrange(Dt_biop) %>%
mutate(diff = DPREL - lag(Dt_biop, default = first(DPREL)))
虽然它有效,但它计算每个 DPREL 与其前一个 Dt_biop 行之间的差异,这是不正确的。它应该计算每行中每个 DPPREL 与先前唯一的 Dt_biop 之间的差异。对于 ID 292,我们有 3 个唯一的 Dt_biop。
对于每个 ID 中的第一次活检,我不需要计算任何差异,因为没有以前的活检。因此,这些行的 diff 值应该为空。
【问题讨论】:
-
欢迎来到 SO!如果您提供最小可重复的示例,您将最大限度地获得有用的答案。 This post 可能会有所帮助。将数据作为图像发布是一种快速结交朋友的好方法:设身处地为我们着想:我们必须先手动转录您的数据,然后才能开始为您提供帮助。当你有一个简单的方法(
dput())来帮助我们帮助你时,为什么我们应该这样做? -
嗨@Limey。正如建议的那样,我尝试添加数据框,但我不确定它的格式是否正确。请让我知道它是否可以并且我的问题是可见的。谢谢。
标签: r datediff data-preprocessing