从data.frame创建矩阵并计算公共值

时间:2018-10-17 17:07:47

标签: r

我正在尝试了解多个网站上的跨域行为。我有此信息

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上做到吗?

1 个答案:

答案 0 :(得分:0)

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")