r - 删除R中类别中的重复元素
问题描述
我有一个这种格式的点击流 .csv 数据文件:
Step_Name Session_ID Category
p-1 1 A
p-1 1 A
p-1 1 A
p-2 1 A
defer 1 A
p-1 2 B
p-3 2 B
p-3 2 B
buy 2 B
p-2 3 A
p-3 3 A
defer 3 A
我想删除 Session_ID 中的重复步骤(例如:Session_ID = 1 中的 3 p-1 步骤应计为 1 p-1 步骤)并转置 Step_Name 列以获取每个类别的步骤数。
Category p-1 p-2 p-3 p-4 buy defer
A 1 2 1 0 0 2
B 1 0 1 0 1 0
我正在 RStudio 中处理这个问题。
解决方案
以下是一个data.table
解决方案,供记录:
代码
dcast(dt[, unique(Step_Name), .(Category, Session_ID)], Category ~ V1)
Category buy defer p-1 p-2 p-3 p-4
1: A 1 3 1 1 0 1
2: B 0 0 0 1 1 1
代码(一步一步)
首先,我们要列出Step_Name
每个Session_ID
-Category
对的唯一条目数。我们通过执行以下代码来做到这一点。
dt_step1 = dt[, unique(Step_Name), keyby = .(Category, Session_ID)]
# data.table generic syntax dt[i, j, by]
# i = which rows? (all)
# j = which action? (unique(Step_Name)) will be called V1 as default
# by = by which groups (Category-Session_ID pairs)
> dt_step1
Category Session_ID V1
1: A 1 buy
2: A 1 p-2
3: A 1 defer
4: A 1 p-4
5: A 2 defer
6: A 3 defer
7: A 3 p-1
8: B 2 p-2
9: B 2 p-3
10: B 3 p-4
接下来,我们要将这些数据转换为宽格式。我们通过提供 和变量的公式来做到这一点dt_step1
(dcast()
我们想要Category
沿着“y轴”和V1
跨“x轴”的观察值。
dt_step2 = dcast(dt_step1, Category ~ V1, value.var = 'V1')
value.var
只是哪个变量将“填充”我们的表格。这将默认为V1
,但您也可以专门提供它。
> dt_step2
Category buy defer p-1 p-2 p-3 p-4
1: A 1 3 1 1 0 1
2: B 0 0 0 1 1 1
数据
set.seed(2)
n = 10
dt = data.table(
Step_Name = sample(c('p-1', 'p-2', 'p-3', 'p-4', 'buy', 'defer'), n, T),
Session_ID = sample(c(1,2,3), n, T),
Category = sample(c('A', 'B'), n, T)
)
推荐阅读
- mongodb - 如何将文档转换为键值?
- javascript - JavaScript 字典,[dictionary_name].[something] 是什么意思?
- c# - 实体框架种子 -> SqlException:重置连接会导致与初始登录不同的状态。登录失败。
- selenium-chromedriver - 无头 chrome 中的 Autodesk forge 查看器,CONTEXT_LOST_WEBGL
- python - 将列表传递给导入的函数
- angular - 组件重新加载时角 ngOnInit 强制触发
- express - Nestjs:@Session() 返回未定义
- python - 在 python 3.5 中扩展 logging.Logger 模块
- excel - 导入 .bas 模块会更改模块的名称
- c - ST Micro HAL, stm32f7xx_hal_crc.c 如何解决【警告】取消引用类型双关指针会破坏严格别名规则