我正在尝试为相同的个人ID确定给定列中出现在另一列中的日期之前的最早日期。
作为相同理论的一个例子,但具体情况不同--比如一个人经常在商店购物,但有时只使用优惠券。我有每次访问的记录,以及他们是否使用优惠券。对于每次访问,我想知道他们使用优惠券的最早过去日期(忽略他们在未来访问中使用优惠券的次数)。
以下是我拥有的数据:
\begin{table}[]
\begin{tabular}{lll}
ID & visit\_date & coupon\_date \\
1 & 3/1/2018 & \\
1 & 2/1/2018 & 2/1/2018 \\
1 & 1/1/2018 & \\
2 & 7/1/2018 & 7/1/2018 \\
2 & 6/1/2018 & \\
3 & 12/1/2018 & \\
3 & 11/1/2018 & 11/1/2018 \\
3 & 9/1/2018 & \\
3 & 8/1/2018 & 8/1/2018
\end{tabular}
\end{table}
下面是我想要的样子:
\begin{table}[]
\begin{tabular}{lll}
ID & visit\_date & most\_recent\_coupon\_date \\
1 & 3/1/2018 & 2/1/2018 \\
1 & 2/1/2018 & 2/1/2018 \\
1 & 1/1/2018 & \\
2 & 7/1/2018 & 7/1/2018 \\
2 & 6/1/2018 & \\
3 & 12/1/2018 & 11/1/2018 \\
3 & 11/1/2018 & 11/1/2018 \\
3 & 9/1/2018 & 8/1/2018 \\
3 & 8/1/2018 & 8/1/2018
\end{tabular}
\end{table}
我尝试过使用max、领先/滞后等,但我找不到一种方法来获取记录在另一列中的日期之前的最大日期。
感谢您的帮助!
发布于 2021-10-13 02:09:52
您可以使用dplyr
库和zoo
库来完成此操作:
library(dplyr)
library(zoo)
newdf <- na.locf(mutate_all(df, list(~na_if(.,""))), fromLast=T)
newdf[strptime(newdf$visit_date, format="%d/%m/%Y") < strptime(newdf$coupon_date, format="%d/%m/%Y"), 'coupon_date'] <- ''
输出:
> newdf
ID visit_date coupon_date
1 1 3/1/2018 2/1/2018
2 1 2/1/2018 2/1/2018
3 1 1/1/2018
4 2 7/1/2018 7/1/2018
5 2 6/1/2018
6 3 12/1/2018 11/1/2018
7 3 11/1/2018 11/1/2018
8 3 9/1/2018 8/1/2018
9 3 8/1/2018 8/1/2018
>
https://stackoverflow.com/questions/69548741
复制相似问题