2010-06-01 10 views
17

Tengo un vector de cadenas. Confirmar mi vectorial, es awesome:¿Cómo hacer un conjunto único de nombres a partir de un vector de cadenas?

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

Me gustaría hacer un nuevo vector que es la misma longitud que awesome pero donde, si es necesario, las cadenas se han uniqueified. Por ejemplo, una salida válida de mi función deseada sería

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

¿Hay un R-thonic y hermoso manera fácil, para hacer esto? Debo decir que mi lista en la vida real (no se llama awesome) contiene 25000ish identificadores de conjuntos de pruebas mircoarray.

Siempre estoy nervioso cuando me embarco en la escritura de pequeñas funciones genéricas (que estoy seguro de que podría hacerlo) como estoy seguro que algún gurú R ha encontrado con este problema en el pasado, dado en el clavo con un poco increíble algoritmo que ni siquiera tiene que almacenar más de la mitad de un elemento en el vector. No estoy seguro de cómo lo podrían haber llamado. Probablemente no uniqueify.

Respuesta

19

Trate make.unique() donde el primer ejemplo de la página de ayuda que ya está en el lugar:

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

La página de ayuda enumera Thomas Minka como autor. Cómprale una cerveza un día :)

+1

para que toda la respuesta ... make.unique (strsplit (impresionante, '') [[1]]) Es necesario separar la palabra a cabo en un personaje vector – John

+0

El título de publicación y el ejemplo original muestran 'vector de cadenas', por lo que no creo que necesitemos 'strsplit()'. –

+0

realmente esta ha sido mi experiencia de preguntas y respuestas más limpia en stackoverflow. ¡Muchas gracias! Definitivamente le daré una cerveza al Dr. Minka si alguna vez tengo la oportunidad. Supongo que, siguiendo este patrón, le debo cerveza por EP y ¿no desarrolló la notación de "puertas"? Probablemente debería conseguirle cerveza para eso, también. –

Cuestiones relacionadas