r - R:如何根据来自其他列的值对序列进行分组
问题描述
--已编辑--
我有一个如下例所示的数据框。
+--------+-------------------------------+-----------+------------+
| userID | timestamp | medium | conversion |
+--------+-------------------------------+-----------+------------+
| us001 | 2019-01-18T00:11:55.385+00:00 | cpc | 0 |
| us001 | 2019-01-18T00:12:35.385+00:00 | organic | 1 |
| us001 | 2019-01-19T00:15:25.385+00:00 | referral | 0 |
| us001 | 2019-01-19T00:15:25.385+00:00 | social | 0 |
| us001 | 2019-01-19T00:17:25.385+00:00 | organic | 0 |
| us002 | 2019-01-19T00:17:20.385+00:00 | organic | 0 |
| us003 | 2019-01-18T00:11:55.385+00:00 | cpc | 0 |
| us003 | 2019-01-18T00:12:35.385+00:00 | cpc | 0 |
| us003 | 2019-01-19T00:15:25.385+00:00 | orgnanic | 1 |
| us003 | 2019-01-19T00:15:25.385+00:00 | referral | 0 |
| us003 | 2019-01-19T00:17:25.385+00:00 | referral | 0 |
+--------+-------------------------------+-----------+------------+
我想做的是根据时间对序列进行分组,但我也想根据转换来打破序列。
所以结果将类似于下面的示例。
+--------+----------------------------+------------+
| userID | sequence | conversion |
+--------+----------------------------+------------+
| us001 | cpc > organic | 1 |
| us001 | referra > social > organic | 0 |
| us002 | organic | 0 |
| us003 | cpc > cpc > organic | 1 |
| us003 | referra > referral | 0 |
+--------+----------------------------+------------+
我使用下面的代码来创建序列并根据用户 ID 和时间对行进行分组。
groupedData <- gadata %>%
arrange(userID, timeDate) %>%
group_by(userID) %>%
mutate(sequence = paste0(medium, collapse = " > "))
但是我很难使用列转换中的第二个值对数据进行分组。
编辑
我想要实现的是对序列进行分组,直到记录转换并等于 1。如果同一用户在他/她转换后的最后一次访问后再次访问该站点,则应对转换后的下一次访问进行分组作为同一用户的新的单独序列,直到记录另一个转换。我希望这更有意义。
数据框中的每个原始数据都是一次访问,并非每次访问都会导致转换。所以很多访问都会有一个转化价值“0”。用户转化的那一刻,转化的价值将变为 1。但转化仅适用于单次访问。但是,用户在决定转换之前可能会多次访问该网站。这就是为什么转化访问之前并非所有访问的值都为 1 的原因。
编辑结束
如果有帮助,此数据集将与“markovchain”包一起使用。
我对 R 不是很有经验。任何帮助将不胜感激。
谢谢你。
解决方案
我认为您对结果应该是什么或数据应该如何感到有些困惑。为了得到你想要的结果,数据应该被修改,因为你不能在你的数据中为 us001group_by
conversion
显示conversion
1 和 as cpscmedium
和organic,cpcmedium
为 us001 显示 0。修改后的数据应如下所示。
gadata <- tibble(userID = c('us001','us001','us001','us001','us001','us002','us003','us003','us003','us003','us003'),
timeDate = c('2019-01-18T00:11:55.385+00:00','2019-01-18T00:12:35.385+00:00','2019-01-19T00:15:25.385+00:00','2019-01-19T00:15:25.385+00:00',
'2019-01-19T00:17:25.385+00:00','2019-01-19T00:17:20.385+00:00','2019-01-18T00:11:55.385+00:00','2019-01-18T00:12:35.385+00:00',
'2019-01-19T00:15:25.385+00:00','2019-01-19T00:15:25.385+00:00','2019-01-19T00:17:25.385+00:00'),
medium = c('cpc','organic','referral','social','organic','organic','cpc','cpc','orgnanic','referral','referral'),
conversion = c(1,1,0,0,0,0,1,1,1,0,0))
在这种情况下,数据将按 和 分组userID
。conversion
(请注意,在您的表中,一列被调用timestamp
,但在您的代码中timeDate
)
groupedData <- gadata %>%
group_by(userID, conversion) %>%
arrange(userID, timeDate) %>%
summarise(sequence = paste0(medium, collapse = " > ")) %>%
select(userID, sequence, conversion) %>%
arrange(userID, desc(conversion))
推荐阅读
- java - 关于Java中通配符捕获的困惑
- ruby-on-rails - 如何从 json 响应创建对象数组
- c++ - 递归合并排序
- mysql - mac os 上的 MYSQL 5.6.41 中的 FOREIGN KEY 赋值
- c# - 自定义 ConfigurationElementCollection 抛出 TargetInvocationException
- javascript - 使用onmouseout javascript时如何将背景设置为旧颜色
- java - Firebase 中的 getValue() 方法是什么?
- angular - Angular 6 UI Router 类解析器
- node.js - 无法在节点中使用表单数据插入数据
- sql-server - SQL Server - 在 XML.value() 中使用隐式 SQL 变量时出错