2010-06-01 7 views
17

Ich habe einen Vektor von Strings. Schauen Sie sich meine Vektor, dann ist es awesome:Wie erstellt man einen eindeutigen Satz von Namen aus einem Vektor von Strings?

> awesome 
[1] "a" "b" "c" "d" "d" "e" "f" "f" 

Ich möchte einen neuen Vektor machen, die die gleiche Länge wie awesome ist aber wo, wenn nötig, die Saiten uniqueified worden. Zum Beispiel würde eine gültige Ausgabe meiner gewünschten Funktion

> awesome.uniqueified 
[1] "a" "b" "c" "d.1" "d.2" "e" "f.1" "f.2" 

Gibt es eine einfache, R-thonic und schöne Art und Weise, dies zu tun? Ich sollte sagen meine Liste im wirklichen Leben (es heißt nicht awesome) enthält 25000ish mircoarray probeset identifiers.

Ich bin immer nervös, wenn ich kleine generische Funktionen schreibe (was ich sicher tun könnte), da ich sicher bin, dass irgendein R-Guru in der Vergangenheit auf dieses Problem gestoßen ist und es mit einem unglaublichen Algorithmus versehen hat das muss nicht einmal mehr als ein halbes Element im Vektor speichern. Ich bin mir nur nicht sicher, wie sie es genannt haben könnten. Wahrscheinlich nicht uniqueify.

Antwort

19

Versuchen make.unique() wo das erste Beispiel für die Hilfeseite bereits auf den Punkt gebracht:

make.unique(c("a", "a", "a")) 
[1] "a" "a.1" "a.2" 

Die Hilfeseite listet Thomas Minka als Autor. Kaufen Sie ihm ein Bier 1 Tag :)

+1

, um die ganze Antwort zu machen ... make.unique (strsplit (genial, ‚‘) [[1]]) Sie müssen das Wort trennen in einen Charakter vector – John

+0

Der Posting-Titel und das ursprüngliche Beispiel zeigen 'vector of strings', also glaube ich nicht, dass wir 'strsplit()' brauchen. –

+0

wirklich dies war meine sauberste Frage/Antwort Erfahrung aller Zeiten auf Stackoverflow. Vielen Dank! Ich werde Dr. Minka definitiv ein Bier geben, sollte ich jemals die Gelegenheit dazu bekommen. Ich glaube, dass ich ihm nach diesem Muster Bier für EP schulde und hat er nicht die "Gates" -Notation entwickelt? Wahrscheinlich sollte er auch dafür Bier bekommen. –

Verwandte Themen