我有数据,包括日期和星期几。
我想确定在原始数据中紧接在日期之前的特定工作日的4个示例,以及在原始数据中紧接在日期之后的同一工作日的4个示例。例如,如果第一个记录的日期为“2010-05-03”,这是一个星期二,我想将2010年4月的4个星期二和2010年5月的4个星期二行绑定到原始数据集。我想对原始数据中的每条记录执行此操作,并获得包含所有原始记录的单个数据集,添加了日期的记录。
在添加这些新行时,我还想用原始数据中的所有列的值填充这些新行,除了一个列。例外是一个名为“event”的变量,它指示该行是否在原始数据集中。
最后,我想从每个原始记录中添加到原始数据的8行中随机选择4行,这样最终的数据集每个原始记录有5行(1行包含原始日期,4行包含添加和随机选择的日期)。
预期输出
> head(dt1[, 1:7])
id duplicate_ data di na dow year month date_of_on
1: 1 <NA> <NA> Tuesday 2011 5 2011-05-03
2: 2 <NA> <NA> Saturday 2011 12 2011-12-10
> head(dt3[1:10, 1:7])
date year month day dow id date_of_onset event
1: 2011-04-05 2011 4 5 Tuesday 1 2011-05-03. 0
2: 2011-04-12 2011 4 12 Tuesday 1 2011-05-03 0
3: 2011-04-19 2011 4 19 Tuesday 1 2011-05-03 0
4: 2011-04-26 2011 4 26 Tuesday 1 2011-05-03 0
5: 2011-05-03 2011 5 3 Tuesday 1 2011-05-03 1
6: 2011-05-10 2011 5 10 Tuesday 1 2011-05-03 0
7: 2011-05-17 2011 5 17 Tuesday 1 2011-05-03 0
8: 2011-05-24 2011 5 24 Tuesday 1 2011-05-03 0
9: 2011-05-31 2011 5 31 Tuesday 1 2011-05-03 0
字符串
在从添加的8行中随机选择4行后,它应该如下所示
> head(dt4[1:10, 1:7])
date year month day dow id date_of_onset event
1: 2011-04-05 2011 4 5 Tuesday 1 2011-05-03. 0
2: 2011-04-19 2011 4 19 Tuesday 1 2011-05-03 0
3: 2011-05-03 2011 5 3 Tuesday 1 2011-05-03 1
4: 2011-05-10 2011 5 10 Tuesday 1 2011-05-03 0
5: 2011-05-24 2011 5 24 Tuesday 1 2011-05-03 0
型
我发现下面的帖子部分有用,但不能完全满足我的查询:How to row bind all cases of a particular weekday in a given year-month into an R dataset
1条答案
按热度按时间sulc1iza1#
如果我理解正确的话,你可以尝试以下方法。
使用
pmap_dfr
遍历data.frame的每一行。在这种情况下,您可以通过该函数传递所有列数据...
。sample_dates
将从包含事件前4周和事件后4周的日期向量中采样。结果将被放置到一个临时 Dataframe 中,
event
为0,并与原始数据(event
为1)合并。字符串
输出
型