2017-12-04 12 views
0

Ich verwende das Paket RISmed in R, um Informationen von PubMed zu erhalten. Die Paketfunktion "Mesh" ermöglicht es mir, die MeSH-Begriffe jedes Zitats zu erhalten. Trotzdem ist es eine Liste, die einen Datenrahmen enthält. Ich möchte jeden MeSH Begriff neben seiner entsprechenden Zitat ID (PMID) auflisten. Zum Beispiel kann eine Tabelle I, die sowohl Werte konstruieren:Extrahiere Zeilen aus dem Dataframe in der Liste innerhalb des Datenrahmens in R

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

Die erste Spalte ist ein char Objekt aber die zweite ist eine Liste, eine Datenrahmen enthält. Wenn der Wert innerhalb der 1. Säule waren „29145282“ und der Gehalt an 2dnd Säule waren „Kardiomyopathie, hypertrophe“, „Kombinierte Therapie“ und „Differentialdiagnose“, ich möchte erhalten:

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

Wie konnte Ich beende das?

+2

Bitte versuchen Sie [ein reproduzierbares Beispiel] (https: //stackoverflow.c om/questions/5963269/how-to-make-a-great-r-reproduzierbares Beispiel). Geben Sie mindestens den Code ein, der 'MedlineObject' generiert hat. Außerdem ist 'table' kein großer Variablenname (es gibt eine Funktion mit dem gleichen Namen). – neilfws

+0

Hallo Neilfws, das Beispiel von @TooYoung unten ist ein guter. "Tabelle" ist in der Tat kein guter Variablenname. Es war nicht wirklich, nur ein Beispiel. Danke – panchtox

+0

Froh zu hören, dass es funktioniert. Würde es Ihnen etwas ausmachen, diese Antwort zu akzeptieren? – TooYoung

Antwort

1

Ich mag würde myeloma als Beispiel für medline object verwenden, da ich Ihre Daten nicht haben. myeloma ist ein Medline-Daten innerhalb RISmed Paket.

zuerst die ID für alle Datenrahmen in der Liste hinzufügen, indem Sie mapply und cbind:

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

Und dann verschmelzen alle Liste in einem Datenrahmen von do.call und rbind:

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

Sie müssen nur Ändern Sie "Myelom" im Code zu Ihrem eigenen MedlineObject

+0

Es funktionierte genau wie erwartet. Vielen Dank! – panchtox

0

Überprüfen Sie die tidyr und tibble Pakete. Stellen Sie sicher, dass Sie sich die Funktionen nest() und unnest() ansehen. Ich kann Ihnen ohne ein reproduzierbares Beispiel nicht viel mehr Rat geben.

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

temp = tibble::tibble(x, data) 
temp 
tidyr::unnest(temp) 
+0

Ich kann keine Kommentare machen – struggles

Verwandte Themen