我有一个非常大的 Dataframe ,包含超过300个日期列(且〉100,000行)。每行还包含一个“索引日期”。对于每行,我想确定是否有任何后续日期列包含索引日期6个月内的日期。然后,我需要一个单独列的输出,它告诉我该行的哪些日期列包含索引日期6个月内的日期。恐怕我还没有真正尝试过任何有意义的东西,因为我不知道从哪里开始,但我提供了一个简单的例子,我正在努力实现以下。我将非常感谢任何想法,请!
Dataframe 示例
library(dplyr)
example <- data.frame(
'index_date' = as.Date(c('2006/01/01', '2007/01/01', '2008/01/01', '2009/01/01', '2010/01/01')),
'date_1' = as.Date(c('2006/02/01', '2004/01/01', '2004/01/01', '2004/01/01', '2004/01/01')),
'date_2' = as.Date(c('2011/02/01', '2006/12/01', '2005/01/01', '2005/01/01', '2005/01/01')),
'date_3' = as.Date(c('2012/02/01', '2012/12/01', '2012/01/01', '2012/01/01', '2010/03/01')),
'date_4' = as.Date(c('2013/03/01', '2012/12/01', '2012/01/01', '2012/01/01', '2010/06/01'))) %>%
# now create the `date_range` columns for each row. `start_range` is 6 months prior to the index date (182.6 days) and `end_range` is 6 months (182.6 days) after the index date
mutate(start_range = (index_date - 182.6),
end_range = (index_date + 182.6))
这将生成以下 Dataframe
index_date date_1 date_2 date_3 date_4 start_range end_range
1 2006-01-01 2006-02-01 2011-02-01 2012-02-01 2006-03-01 2005-07-02 2006-07-02
2 2007-01-01 2004-01-01 2006-12-01 2012-12-01 2012-12-01 2006-07-02 2007-07-02
3 2008-01-01 2004-01-01 2005-01-01 2012-01-01 2012-01-01 2007-07-02 2008-07-01
4 2009-01-01 2004-01-01 2005-01-01 2012-01-01 2012-01-01 2008-07-02 2009-07-02
5 2010-01-01 2004-01-01 2005-01-01 2010-03-01 2010-06-01 2009-07-02 2010-07-02
现在,我想要做的是创建另一个名为matching_date
的列,对于每一行,它告诉我哪些日期列在日期范围内。(date_3
和date_4
),因此,理想情况下,我还需要合并一个函数来标识最接近索引日期的日期(在本例中,它将是date_3
)。
期望输出
index_date date_1 date_2 date_3 date_4 start_range end_range matching_date
1 2006-01-01 2006-02-01 2011-02-01 2012-02-01 2006-03-01 2005-07-02 2006-07-02 date_1
2 2007-01-01 2004-01-01 2006-12-01 2012-12-01 2012-12-01 2006-07-02 2007-07-02 date_2
3 2008-01-01 2004-01-01 2005-01-01 2012-01-01 2012-01-01 2007-07-02 2008-07-01 NA
4 2009-01-01 2004-01-01 2005-01-01 2012-01-01 2012-01-01 2008-07-02 2009-07-02 NA
5 2010-01-01 2004-01-01 2005-01-01 2010-03-01 2010-06-01 2009-07-02 2010-07-02 date_3
2条答案
按热度按时间e4eetjau1#
使用
dplyr
的方法。index_date
)。Is
的Min
和index_date
之间的最小距离与关联列名匹配。数据
cnjp1d6j2#
假设您的记录是由
index_date
唯一标识的,您可以这样做:创建于2023年1月5日,使用reprex v2.0.2