我有一个用户ID,事件和事件发生日期的数据框,我想创建一个新的数据框,显示每个用户在每个日期完成了多少个事件。我在下面举例说明了我要实现的目标。日期以d / m / y为单位。
我曾尝试使用tidyr中的gather()
,但无法使其正常工作,并且我也尝试过使用with()
。
So my my dataframe, df, looks like this currently:
UserId Date Event
123 01-01-2019 Open
123 01-01-2019 Push
123 03-01-2019 Open
234 01-01-2019 Open
234 02-01-2019 Open
345 02-01-2019 Push
345 05-01-2019 Open
345 05-01-2019 Push
345 05-01-2019 Move
456 03-01-2019 Open
567 05-01-2019 Open
567 05-01-2019 Push
I want to create a new one based on df, that looks as follows:
UserId 01-01-2019 02-01-2019 03-01-2019 04-01-2019 05-01-2019
123 2 0 1 0 0
234 1 1 0 0 0
345 0 1 0 0 3
456 0 0 1 0 0
567 0 0 0 0 2
因此,我实质上是想在90天的时间内获取每天的数据帧。对此的任何帮助都将非常有用。使用with()
时,任何与事件无关的日期都将被忽略,这是我不想发生的。
答案 0 :(得分:0)
我们可以尝试
library(tidyverse)
df1 %>%
count(UserId, Date) %>%
spread(Date, n, fill = 0)
# A tibble: 5 x 5
# UserId `01-01-2019` `02-01-2019` `03-01-2019` `05-01-2019`
# <int> <dbl> <dbl> <dbl> <dbl>
#1 123 2 0 1 0
#2 234 1 1 0 0
#3 345 0 1 0 3
#4 456 0 0 1 0
#5 567 0 0 0 2
或带有table
table(df1[1:2])