【发布时间】:2017-09-22 17:54:21
【问题描述】:
我有想要通过user_id 聚合的示例数据集。每条记录代表一个注册。
> test
user_id time plan
1 1 2017-06-23 20:00:00 monthly
2 2 2017-07-20 20:00:00 monthly
3 3 2017-06-03 20:00:00 monthly
4 1 2017-07-03 20:00:00 monthly
5 2 2017-05-11 20:00:00 yearly
6 3 2017-07-27 20:00:00 yearly
7 1 2017-05-09 20:00:00 yearly
8 2 2017-01-15 19:00:00 yearly
9 3 2017-08-18 20:00:00 yearly
10 1 2017-01-30 19:00:00 monthly
每个用户都以不同的顺序注册了不同的计划 (time)。
比如用户1的序列是monthly-yearly-monthly- monthly,那么用户1切换了两次次。
用户 2 拥有yearly-yearly-monthly,因此用户 2 已切换一次
用户 3 已从 monthly-yearly-yearly 离开,因此用户 3 已切换一次。
> test[order(test$time),]
user_id time plan
8 2 2017-01-15 19:00:00 yearly
10 1 2017-01-30 19:00:00 monthly
7 1 2017-05-09 20:00:00 yearly
5 2 2017-05-11 20:00:00 yearly
3 3 2017-06-03 20:00:00 monthly
1 1 2017-06-23 20:00:00 monthly
4 1 2017-07-03 20:00:00 monthly
2 2 2017-07-20 20:00:00 monthly
6 3 2017-07-27 20:00:00 yearly
9 3 2017-08-18 20:00:00 yearly
我的目标是总结开关的组合,换句话说,总结有多少用户从yearly到monthly,有多少用户从monthly到yearly,有多少用户多次切换计划。以下数据集的输出可能如下所示:
> output
type count
1 monthly-yearly 1
2 yearly-monthly 1
3 multiple 1
如何按user_id 进行分组,然后将R 中的字符串序列减少为multiple、monthly-yearly 或yearly-monthly?任何建议或意见将不胜感激。
上面的数据集:
> dput(test)
structure(list(user_id = c(1, 2, 3, 1, 2, 3, 1, 2, 3, 1), time = structure(c(1498262400,
1500595200, 1496534400, 1499126400, 1494547200, 1501200000, 1494374400,
1484524800, 1503100800, 1485820800), class = c("POSIXct", "POSIXt"
)), plan = c("monthly", "monthly", "monthly", "monthly", "yearly",
"yearly", "yearly", "yearly", "yearly", "monthly")), .Names = c("user_id",
"time", "plan"), row.names = c(NA, -10L), class = "data.frame")
【问题讨论】:
标签: r dplyr data.table sequence