我有一个与此类似的结构数据集:
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行,并且同一天在同一帐户上可能有许多操作。有没有办法让我把它分解成有意义的东西?
答案 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