r - 从 data.frame 创建矩阵并计算常见值
问题描述
我试图了解多个网站上的跨域行为。我有这个信息
Website ClientID SessionId
-------------------------------------
domain1 xxx d.0686
domain2 xxx d.0686
domain3 yyy f.1871
domain2 yyy f.1871
domain4 yyy f.1871
domain1 zzz n.9210
domain2 zzz n.9210
人们可以跨多个网站移动,但他们保留 ClientID(存储为 cookie)和 SessionID(当一个人从一个域移动到另一个域时在不同网站之间共享)。
我需要查看两个不同网站共享多少 SessionID。我想最简单的方法是创建一个矩阵来计算共享的唯一 SessionId。这将是基于上表的结果
Domain1 Domain2 Domain3 Domain4
--------------------------------------------------------
domain1 0 2 0 0
domain2 2 0 1 1
domain3 0 1 0 0
domain4 0 1 0 0
通过这种方式,我可以计算在同一个 sessionID 中使用两个不同网站的次数,并创建一个带有circlize()
包的 Chord Diagram 以可视化关系。
可以在R上做到吗?
解决方案
domains <- unique(information$Website)
output <- matrix(0, length(domains), length(domains))
colnames(output) <- rownames(output) <- domains
for (x in domains) {
X <- unique(information[information$Website == x, 'SessionId'])
for (y in domains) {
Y <- unique(information[information$Website == y, 'SessionId'])
output[rownames(output) == x, y] <- length(intersect(X, Y))
}
}
print(output)
#domain1 domain2 domain3 domain4
#domain1 2 2 0 0
#domain2 2 3 1 1
#domain3 0 1 1 1
#domain4 0 1 1 1
数据
information <- structure(list(Website = c("domain1", "domain2", "domain3", "domain2", "domain4",
"domain1", "domain2"),
ClientID = c("xxx", "xxx", "yyy", "yyy", "yyy", "zzz", "zzz"),
SessionId = c("d.0686", "d.0686", "f.1871", "f.1871", "f.1871",
"n.9210", "n.9210")),
.Names = c("Website", "ClientID", "SessionId"),
row.names = c(NA, -7L), class = "data.frame")
推荐阅读
- r - 如何取消 R 中上一步的设置
- javascript - 为什么 \\ 在 mathjax 中不显示换行符?
- java - 与端口 8100 的连接被拒绝,得到未知状态的响应:{"code":"ECONNRESET"} 代理 [GET /status] 到
- git - GIT:如何将忘记的提交(在 master 中)添加到新分支
- dictionary - 滑块阅读字典键 SwiftUI
- c++ - 这两个代码片段相似但显示不同的结果
- codeigniter-4 - 在 Codeignitor 4 中找不到类“CodeIgniter\Filters\Logincheck”
- javascript - 如何在不使用状态的情况下在 React 中制作一个简单的计数器
- java - 找到 JUnit 0 测试
- python-3.x - 在 sys.version 中是 Clang 作为编译器,而不是 python,我该怎么办?