2017-01-30 2 views
0

Ich habe eine Liste in R mit dem Namen Cell.Arrangement, die aus 9 verschiedenen Zellenanordnungstypen besteht. Ich versuche, diese Anordnungen durch die Nummern 1-9 zu ersetzen, während ich sie durch ein neuronales Netzwerk passe, aber ich muss einen Index darüber behalten, was die Zahlen entsprechen, damit die Ausgabe gelesen werden kann.Ersetzen von Listenelementen durch Nummern unter Beibehaltung der ursprünglichen Namen in R

Die ersten Elemente der Liste wie folgt aus:

[[1]] 
[1] "Chains" "Pairs" "Singles" 

[[2]] 
character(0) 

[[3]] 
character(0) 

[[4]] 
character(0) 

[[5]] 
[1] "Singles" 

[[6]] 
[1] "Tetrad" 

... Und das gewünschte Ergebnis ist dies so etwas wie ...

[[1]] 
[1] 1 2 3 

[[2]] 
character(0) 

[[3]] 
character(0) 

[[4]] 
character(0) 

[[5]] 
[1] 1 

[[6]] 
[1] 4 

... Wo jede Klassifizierung Zellenanordnung entspricht einer Zahl, kann aber zurückverfolgt werden.

Ich habe den folgenden Code, aber anstatt die Anordnungen mit einer eindeutigen Nummer in der Gesamtliste zu ersetzen, ersetzt es die Anordnungen mit einer eindeutigen Nummer in jedem Element, so dass verschiedene Anordnungen mit der gleichen Nummer übereinstimmen ...

RL_AR <- function(x){ 
    if(length(levels(factor(Data$Cell.Arrangement[[x]]))) > 0){ 
    as.vector(factor(Data$Cell.Arrangement[[x]], labels = c(1:length(Data$Cell.Arrangement[[x]])))) 
    }else{ 
    as.vector(factor(Data$Cell.Arrangement[[x]], labels = '')) 
    } 
} 

AR.Index <- data.frame(unique(unlist(Data$Cell.Arrangement))) 

Irgendwelche Vorschläge? Vielen Dank!

+0

Es ist wie Ihre Liste sieht nicht geändert hat Namen, also bin ich mir nicht sicher, was Sie mit "unter Beibehaltung der ursprünglichen Namen" meinen. Können Sie die von Ihnen gesuchte Ausgabe anzeigen? Auch das Teilen Ihrer Daten mit 'dput()' ist nett, also ist es kopierbar. Könnten Sie 'dput (head (your_list))' zu Ihrem Beitrag hinzufügen? – Gregor

+0

Versehentlich gestellte Frage. Ist jetzt abgeschlossen und die tatsächliche Liste wird anstelle von dput angezeigt() –

+0

Ja, könnten Sie bitte ** fügen Sie die 'dput' zu Ihrer Frage **, um es einfacher zu reproduzieren? Und haben Sie bereits die Übereinstimmung zwischen Zellanordnungsklassifikationen und -zahlen? Oder kreierst du das, was du meinst, indem du "Originalnamen behälst"? – Gregor

Antwort

1

ich zum ersten Mal einen Vektor der einzigartigen Vorkehrungen treffen, dann diesen Vektor verwenden, jede Zeichenfolge in der entsprechenden Nummer (Position in dem Vektor arr)

lst <- list(c("Chains", "Pairs", "Singles"), 
    character(0), 
    character(0), 
    character(0), 
    c("Singles"), 
    c("Tetrad") 
) 

arr <- unique(unlist(lst)) 

lapply(lst, function(x) match(x,arr)) 
Verwandte Themen