Создайте матрицу из data.frame и посчитайте общие значения - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь понять междоменное поведение на нескольких сайтах.У меня есть эта информация

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 имеют два разных сайта.Я предполагаю, что самый простой способ - создать Матрицу, подсчитывающую общие уникальные SessionIds.Это будет результат, основанный на приведенной выше таблице

          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() для визуализации отношения.

Возможно ли это сделать на R?

1 Ответ

0 голосов
/ 17 октября 2018
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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...