根据日期汇总数据

时间:2016-06-03 21:25:26

标签: r

我有一个与此类似的结构数据集:

account_no <- c(1:5, 2, 2 , 3)
interaction_date <- c("1/1/2016","2/5/2016", "3/2/2016",       "27/4/2016","11/10/2015",    "11/10/2015","11/10/2015","2/5/2016")
interaction_date<- as.Date(b, format = "%d/%m/%Y")
action <- c("a","c","b","c","c","a","a","b")
df <- data.frame(account_no ,interaction_date, action)
df

每行都有一些其他属性,但这是典型的结构。

基本上它是日志数据,描述用户的交互(account_no),他们交互的时间以及他们采取的行动。

我被告知要找到数据的基本趋势。 有没有办法可以根据account_no聚合数据,这样可以让我深入了解交互日期之间的平均天数? 或者某种程度的计算,看看在特定的一天采取的最常见的行动是什么? 数据集中有大约80,000行,并且同一天在同一帐户上可能有许多操作。有没有办法让我把它分解成有意义的东西?

2 个答案:

答案 0 :(得分:1)

以下是了解交互日期之间差距的方法:

df$interaction_date <- as.Date(df$interaction_date,'%d/%m/%Y'); ## coerce to Date
df <- df[order(df$interaction_date),]; ## ensure ordered by interaction_date
aggregate(cbind(gap=interaction_date)~account_no,df,function(x) mean(diff(unique(x))));
##   account_no gap
## 1          1 NaN
## 2          2 204
## 3          3  89
## 4          4 NaN
## 5          5 NaN

只有帐户2和3有2次或更多次互动,因此余下的结果无效。 gap单位是互动日期之间的天数。

我添加了unique()调用以在同一天排除多个互动,因为我认为您不希望那些降低平均值。

答案 1 :(得分:0)

或使用data.table

library(data.table)
setDT(df)[, interaction_date := as.IDate(interaction_date, "%d/%m/%Y")]
df[order(account_no,interaction_date), .(Gap = mean(diff(interaction_date))) ,account_no]
#   account_no      Gap
#1:          1 NaN days
#2:          2 102 days
#3:          3  89 days
#4:          4 NaN days
#5:          5 NaN days