Извлечь строки из фрейма данных внутри списка внутри фрейма данных в R

Я использую пакет RISmed в R для получения информации из PubMed. Функция пакета «Mesh» позволяет мне получать термины MeSH для каждой цитаты. Тем не менее, это список, содержащий фрейм данных. Я хочу перечислить каждый термин MeSH помимо его соответствующего идентификатора цитирования (PMID). Например, я могу построить таблицу, содержащую оба значения:

table = cbind(ArticleId(MedlineObject),Mesh(MedlineObject))

Первый столбец — это объект char, а второй — список, содержащий кадр данных. Если бы значение внутри 1-го столбца было «29145282», а содержимое 2-го столбца было «Кардиомиопатия, гипертрофическая», «Комбинированная модальная терапия» и «Диагноз, дифференциальный», я хотел бы получить:

"29145282","Cardiomyopathy, Hypertrophic"
"29145282","Combined Modality Therapy"
"29145282","Diagnosis, Differential"

Как я мог это сделать?


person panchtox    schedule 04.12.2017    source источник
comment
Попробуйте предоставить воспроизводимый пример. Как минимум включите код, который сгенерировал MedlineObject. Кроме того, table — не лучшее имя переменной (есть функция с таким же именем).   -  person neilfws    schedule 04.12.2017
comment
Привет, neilfws, пример, использованный @TooYoung ниже, хорош. table действительно не очень хорошее имя для переменной. Это был не настоящий, только пример. Спасибо   -  person panchtox    schedule 05.12.2017
comment
Рад слышать, что это работает. Не могли бы вы принять этот ответ?   -  person TooYoung    schedule 05.12.2017


Ответы (2)


Я хотел бы использовать myeloma в качестве примера medline object, так как у меня нет ваших данных. myeloma — это данные медицинской линии в пакете RISmed.

Сначала добавьте идентификатор ко всем кадрам данных в вашем списке с помощью mapply и cbind:

MedList = mapply(cbind, "ID"=ArticleId(myeloma),Mesh(myeloma),SIMPLIFY = FALSE)

А затем объедините весь список в один фрейм данных с помощью do.call и rbind:

MedFrame = do.call("rbind",MedList)

Вам просто нужно изменить «миелому» в коде на свой собственный MedlineObject.

person TooYoung    schedule 04.12.2017

Ознакомьтесь с пакетами tidyr и tibble. Обязательно взгляните на функции nest() и unnest(). Я не могу дать вам больше советов без воспроизводимого примера.

x = 1:5
data <- lapply(x, function(i){
  data.frame(y = 1:5 * i)
})

temp = tibble::tibble(x, data)
temp
tidyr::unnest(temp)
person struggles    schedule 04.12.2017
comment
я не могу комментировать - person struggles; 05.12.2017