R Создание матрицы совпадений - PullRequest
0 голосов
/ 24 ноября 2018

Мой вопрос касается интеллектуального анализа текста и его обработки.Я хотел бы построить матрицу совместного использования из моих данных.Мои данные:

dat <- read.table(text="id_reférence id_paper
        621107   621100
        621100   621101
        621107   621102
        621109   621103
        621105   621104
        621103   621105
        621109   621106
        621106   621107
        621107   621108
        621106   621109", header=T)

expected <- matrix(0,10,10)
### Article 1 has been cited by article 2
expected[2, 1] <- 1

Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Здесь другой подход с использованием data.table.Узким местом может быть то, что приведенный ниже подход не заканчивается sparseMatrix.В зависимости от размера вашего набора данных, возможно, стоит проверить подход, ориентированный на разреженный объект данных.

library(data.table)
setDT(dat)
# split id_reférence column into multiple rows by comma
# code for this step taken from: #https://stackoverflow.com/questions/13773770/split-comma-separated-strings-in-a-column-into-separate-rows
dat = dat[, strsplit(as.character(id_reférence), ",", fixed=TRUE),
   by = .(id_paper, id_reférence)][, id_reférence := NULL][
    , setnames(.SD, "V1", "id_reférence")]
# add value column for casting
dat[, cite:= 1]
# cast you data into long format
dat = dcast(dat, id_paper ~ id_reférence, fill = 0)[, id_paper:= NULL]
0 голосов
/ 24 ноября 2018
# loop through the observations of dat
for(i in seq_len(nrow(dat))) {
  # convert reference ids to integer and store in a vector
  # example data requires this step, you may already have integers in your actual data
  ref <- as.integer(strsplit(as.character(dat$id_reférence[i]), ",")[[1]])
  # loop through the list of references
  for(j in ref) {
    # mark the citations using (row, column) ~ (i, j) pairs
    expected[dat$id_paper[i], j] <- 1
  }
}

expected
#      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,]    0    1    0    0    0    0    0    0    0     0
# [2,]    0    0    0    1    0    0    0    1    0     0
# [3,]    1    0    0    0    1    0    0    0    0     0
# [4,]    0    0    0    0    0    0    0    1    0     0
# [5,]    0    0    0    1    1    0    0    0    1     0
# [6,]    0    0    1    0    0    0    0    1    0     0
# [7,]    0    1    0    1    0    0    0    0    0     0
# [8,]    0    0    0    0    0    1    0    0    1     0
# [9,]    0    0    0    0    0    0    0    0    0     1
# [10,]   1    0    0    1    0    0    0    0    1     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...