【发布时间】:2022-01-01 00:23:16
【问题描述】:
我正在使用由不同类别的事件日期组成的日期框架。我的目标是排除与先前观察相比出现在 80 天内的同一类别的日期。例如:
observation Date category
1 2015-05-05 green
2 2015-06-08 green #(this should be excluded)
3 2015-09-30 green
4 2014-06-30 red
5 2014-07-30 red #(this should be excluded)
6 2014-09-30 red #(this should not be excluded, since it is +80 days from the first obs.)
7 2013-01-01 blue
8 2013-02-01 blue #(this should be excluded)
9 2013-06-01 blue
10 2013-07-01 blue #(this should be excluded)
与之前的观察相比,我试图排除 80 天内出现的同一类别的日期(因为在我的研究中,这被认为与之前的观察相同)。然而,我希望排除可能在观察后 80 天内出现的观察结果。例如,观察 6 将出现在观察 5 的 80 天内,应排除,因为它出现在 obs 的 80 天内。 4这是第一个obs。在那个类别中。或许你会明白我的目标是什么:D
我想我可以通过 group_by 函数来做到这一点,然后计算所有门中每个观察之间的天数差异。然而问题在于,在我的示例中,它还会排除像观察 6 这样的日期。
我非常感谢有关如何以最聪明的方式做到这一点的提示。我尝试搜索以前的主题,但找不到任何有用的内容。
问候 阿列克西
编辑:使用 Merijn van Tilborgs 代码的结果示例:
Date Diff_days remove1 remove2
2015-06-29 119 FALSE FALSE
2015-07-09 7 FALSE TRUE
2015-07-15 6 FALSE TRUE
2015-08-18 34 FALSE TRUE
2015-10-03 46 FALSE TRUE
在此示例中,应保存最后一次观察,因为距离实际保存的最后一次观察 (2015-06-29) 有 +80 天。
Edit2:benimwolfspelz 提出的迭代策略:我用来计算同一类别中每个观察之间的天数的代码: df2 %
-
arrange(Date) %>% -
group_by(category) %>% -
mutate(diff_date = c(0,diff(Date)))
【问题讨论】:
-
那么,一个观察是否应该被排除不仅取决于它之前的观察,对吧?不应排除 Nr 6,因为 Nr 5 已经存在,并且您想以“及时”的方式执行此操作,对吗?也许编写一个只排除第一个要排除的观察的函数,然后迭代地应用它(
while)直到没有 -
这正是我想要做的 :) 我会试试的。
-
所以现在我设法创建了一个新列,该列在其自己的类别中的每个观察之间都有天数。我想我可以排除每个类别中少于 80 天的第二次观察,但是我到底如何指定代码,我只查看每个类别中的第二次观察。
-
您能否编辑您的问题以包含创建此新列的代码?
-
现在编辑了:)