如何计算 R 中每天的事件,包括没有事件发生的日期?

数据挖掘 r
2022-02-12 22:06:37

我想创建一个数据框,在第一列中我将包含某个时间段的所有日期,在第二列中包含每个日期发生的事件数,包括未发生事件的日期。我还想计算已分配特定因素的事件

第一个数据框,其中包含给定日期的日期事件:

Row Sex Age      Date
1    2   36   2004-01-05
2    1   47   2004-01-06
3    1   26   2004-01-10
4    2   23   2004-01-20
5    1   50   2004-01-27
6    2   35   2004-01-28
7    1   35   2004-01-30
8    1   38   2004-02-06
9    2   29   2004-02-11

在“性别”栏中,1 表示女性,2 表示男性。

我在检查期间有日期的第二个数据框:

Row    Date
 1  2004-01-05
 2  2004-01-06
 3  2004-01-07
 4  2004-01-08
 5  2004-01-09
 6  2004-01-10
 7  2004-01-11
 8  2004-01-12
 9  2004-01-13
10  2004-01-14

我想得到一个看起来像这样的数据框:

Row    Date       Events (All)   Events (Female)   Events (Male)
 1  2004-01-05         1                0                1
 2  2004-01-06         1                1                0
 3  2004-01-07         0                0                0
 4  2004-01-08         0                0                0
 5  2004-01-09         0                0                0
 6  2004-01-10         0                1                0
 7  2004-01-11         0                0                0
 8  2004-01-12         0                0                0
 9  2004-01-13         0                0                0
10  2004-01-14         0                0                0

有人可以帮忙吗?

1个回答

我做了这样的假设:

事件(全部)= 事件(女性)+ 事件(男性)

我还处理了数据,以便每天有不止一个事件。

结果, df 看起来像:

  Sex Age       Date
1   2  36 2004-01-05
2   1  47 2004-01-05
3   1  26 2004-01-10
4   2  23 2004-01-10
5   1  50 2004-01-27
6   2  35 2004-01-27
7   1  35 2004-01-30
8   1  38 2004-02-30
9   2  29 2004-02-30

下面的代码应该可以达到预期的效果。

library(tidyr)
df = read.csv([Path to dataset], stringsAsFactors = FALSE) 

df %>% group_by(Date, Sex) %>%  
  summarise(sex_count = n()) %>% 
  spread(Sex,sex_count, fill=0) %>% 
  rename( event_female = '1', event_male = '2') %>%
  mutate(event_all = event_female + event_male ) %>%
  select(event_all, event_female, event_male)

输出:

 Date       event_all event_female event_male
  <chr>          <dbl>        <dbl>      <dbl>
1 2004-01-05         2            1          1
2 2004-01-10         2            1          1
3 2004-01-27         2            1          1
4 2004-01-30         1            1          0
5 2004-02-30         2            1          1
```