r - 如何根据字符变量中的唯一值获取累积和?
问题描述
我有 df 代表用户随时间的浏览行为。因此,df 包含一个唯一的 UserId,每一行都有一个时间戳,代表对某个网站的访问。每个网站都有一个唯一的网站 ID 和一个唯一的网站类别,例如 c("electronics", "clothes",....)。现在我想每行计算用户访问了该行(包括该行)的每个类别的唯一网站数量。我将此变量称为“宽度”,因为它代表了用户浏览互联网的范围。
到目前为止,我只设法生成愚蠢的代码,通过过滤每个类别来创建每个类别访问的唯一网站的总数,然后获取用户唯一向量的长度,然后进行左连接。因此,随着时间的推移,我确实会丢失有关发展的信息。
提前非常感谢!
total_breadth <- df %>% filter(category=="electronics") %>%
group_by(user_id) %>%
mutate(breadth=length(unique(website_id)))
#Structure of the df I want to achieve:
user_id time website_id category breadth
1 1 70 "electronics" 1
1 2 93 "clothing" 1
1 3 34 "electronics" 2
1 4 93 "clothing" 1
1 5 26 "electronics" 3
1 6 70 "electronics" 3
#Structure of the df I produce:
user_id time website_id category breadth
1 1 70 "electronics" 3
1 2 93 "clothing" 1
1 3 34 "electronics" 3
1 4 93 "clothing" 1
1 5 26 "electronics" 3
1 6 70 "electronics" 3
解决方案
这似乎是拆分、应用和组合的情况。创建一个由 1 和 0 组成的二进制矩阵,其维数为:
- 行数 = 原始数据中的行数
- 列数 = 唯一网站类别数
每行代表时间戳,每列代表各自的网站类别。因此,当且仅当用户在相应的时间戳上访问了该网站类别的网站时,单元格将等于 1,否则它将为 0。
获取此矩阵的各个列的累积总和,然后创建最后一列,其中仅获取相应时间戳上已访问网站类别的值。
虽然这似乎不是一个优雅的解决方案,但希望这能暂时解决您的问题。
推荐阅读
- javascript - 为什么 Safari 不设置`
- javascript - 不使用 express 的通配符路由
- firebase - 如何在默认 Firebase 应用程序和辅助 Firebase 应用程序之间共享身份验证?
- dependencies - 未在 UD 树库上训练的依赖解析器
- php - php str_replace array by array
- augmented-reality - 在不同的闪电条件下使用 ARKit 和 LiDAR Outdoor
- java - Hilt :- 无法在 AppCompatActivity 中使用 @AndroidEntryPoint 获取 DefaultViewModelFactories 异常?
- angular - 如何正确覆盖从使用可观察的服务继承的服务中的方法?
- python - Django 模型中的 Q() 和两个条件的问题
- python - 如何在 Python 中从 API json 响应中获取特定数据