Итак, я смог разработать граф объектов на основе текста, образец ниже.Назовите уже пронумерованные вершины в неориентированном графе, используя R
X1 X2
PERSON Sherlock Holmes 1
PERSON Sir Arthur Conan Doyle 1
PERSON Sherlock Holmes 2
PERSON Watson 2
PERSON Moriarty 2
Мне удалось создать неориентированный граф с отношениями между объектами в столбце X1 и столбце X2. Числа в столбце X2 являются номерами групп. Шерлок Холмс и сэр Артур Конан Дойль находятся в одной группе. В идеале я хотел бы создать и ненаправленный график не между сущностью в столбце X1 и номером группы в столбце X2, а с сущностью и другими членами группы, как показано ниже.
X1 X2
PERSON Sherlock Holmes PERSON Sherlock Holmes
PERSON Sherlock Holmes PERSON Sir Arthur Conan Doyle
PERSON Sir Arthur Conan Doyle PERSON Sir Arthur Conan Doyle
PERSON Sir Arthur Conan Doyle PERSON Sherlock Holmes
PERSON Sherlock Holmes PERSON Sherlock Holmes
PERSON Sherlock Holmes PERSON Watson
PERSON Sherlock Holmes PERSON Moriarty
PERSON Watson PERSON Watson
PERSON Watson PERSON Sherlock Holmes
PERSON Watson PERSON Moriarty
PERSON Moriarty PERSON Moriarty
PERSON Moriarty PERSON Sherlock Holmes
PERSON Moriarty PERSON Watson
Было бы очень хорошо, чтобы быть в состоянии удалить дубликаты в пределах графика, так что я получил результат ниже.
X1 X2
PERSON Sherlock Holmes PERSON Sir Arthur Conan Doyle
PERSON Sir Arthur Conan Doyle PERSON Sherlock Holmes
PERSON Sherlock Holmes PERSON Watson
PERSON Sherlock Holmes PERSON Moriarty
PERSON Watson PERSON Sherlock Holmes
PERSON Watson PERSON Moriarty
PERSON Moriarty PERSON Sherlock Holmes
PERSON Moriarty PERSON Watson
Я использовал приведенный ниже код, чтобы получить текст в фрейме данных с номерами групп.
num.el <- sapply(entities.list, length)
association.matrix <- cbind(unlist(entities.list), rep(1:length(entities.list), num.el))
Так вот, фактический код я получаю с ошибками по просьбе мистера Флика. Данные - электронное электронное письмо.
entities.list <-
$all4
[1] " " "PERSON kaye"
$all9
[1] "MISC Content-Type : text plain; charset=us-ascii" "ORGANIZATION X-From"
"PERSON Kaye Ellis"
[4] "PERSON Lisa Mackey" "MISC X-bcc"
Соответствуют список dataframe
association.matrix <- data.frame(matrix(unlist(entities.list), byrow=T))
association.matrix
Соответствуют список в список, где объекты в одном элементе списка сгруппированы по ассоциации в ряде
num.el <- sapply(entities.list, length)
association.matrix <- cbind(unlist(entities.list), rep(1:length(entities.list), num.el))
удалить пустые строки записи
association.matrix <- association.matrix[!apply(association.matrix, 1, function(x)
any(x==" ")),]
принуждать матрица для dataframe и удаления строк, как факторы association.matrix < - data.frame (association.matrix, stringsAsFactors = FALSE)
Таким образом, данные выглядят как это сейчас
X1 X2
1 PERSON kaye 1
2 MISC Content-Type : text plain; charset=us-ascii 2
3 ORGANIZATION X-From 2
4 PERSON Kaye Ellis 2
5 PERSON Lisa Mackey 2
6 MISC X-bcc 2
Вот г-н Сценарий Флика, который я пытаюсь получить
association.matrix <- do.call(rbind, lapply(tapply(association.matrix$X1,
association.matrix$X2, combn, 2), function(x)
rbind(t(x), t(x)[,2:1])))
И вот ошибка, которую я получаю.
Error in FUN(X[[1L]], ...) : n < m
К сожалению я не ответила раньше, не могу за жизнь мне получить эту работу на моих фактических данных. Ваш пример отлично работал. Продолжайте получать ошибку Ошибка в FUN (X [[1L]], ...): n
Jake
@Jake Без воспроизводимого примера я не могу помочь. Я понятия не имею, что может быть неправильным в ваших реальных данных. – MrFlick
Добавлен пример, дайте мне знать, что вы думаете и спасибо! – Jake