2011-05-31 16 views
9

Soy nuevo en R y mi pregunta debería ser trivial. Necesito crear una nube de palabras a partir de un archivo txt que contenga las palabras y su número de ocurrencia. Para ese propósito, estoy usando el snippets package. Como se puede ver en la parte inferior del enlace, primero tengo que crear un vector (¿es correcto que las palabras sean un vector?) Como bramido.Crear un vector a partir de un archivo en R

> words <- c(apple=10, pie=14, orange=5, fruit=4) 

Mi problema es hacer lo mismo pero crear el vector a partir de un archivo que contendrá palabras y su número de incidencia. Estaría muy feliz si pudieras darme algunas pistas.

Además, para comprender el formato del archivo que se va a insertar, escribo las palabras del vector en un archivo.

> write(words, file="words.txt") 

Sin embargo, el words.txt archivo contiene sólo los valores pero no los nombres (de manzana, pastel, etc.).

$ cat words.txt 
10 14 5 4 

Thanks.

+0

+1 para señalar el paquete de fragmentos. No estaba al tanto de eso. –

Respuesta

5

words es un vector llamado , la distinción es importante en el contexto de la función cloud() si leo la ayuda correctamente.

escriba los datos correctamente en un archivo:

write.table(words, file = "words.txt") 

crear el archivo ocurrencia palabra como el archivo txt creado. Cuando lo lea de nuevo a R, es necesario hacer un poco de manipulación:

> newWords <- read.table("words.txt", header = TRUE) 
> newWords 
     x 
apple 10 
pie 14 
orange 5 
fruit 4 
> words <- newWords[,1] 
> names(words) <- rownames(newWords) 
> words 
apple pie orange fruit 
    10  14  5  4 

Lo que estamos haciendo aquí es leer el archivo en newWords, la creación de subconjuntos que tome la única columna (variable), que almacenamos en words. El último paso es tomar los nombres de fila del archivo leído y aplicarlos como los "nombres" en el vector words. Hacemos el último paso usando la función names().

+1

Para un trazador de líneas, use 'as.matrix (read.table ('words.txt')) [, 1]' (el subconjunto de matriz propaga nombres mientras que data.frame no lo hace). – Charles

3

Sí, 'vector' es el término correcto.

EDIT:
Un método mejor que write.table sería utilizar save() y la carga():

save(words. file="svwrd.rda") 
load(file="svwrd.rda") 

La guardar/combo de carga conserva toda la estructura en lugar de hacer la coacción. El write.table seguido de los nombres() < - es una especie de molestia como se puede ver en la respuesta de Gavin aquí y mi respuesta en rhelp.

Respuesta inicial: Sugiera que use as.data.frame para forzar a un marco de datos y luego write.table() para escribir en un archivo.

write.table(as.data.frame(words), file="savew.txt") 
saved <- read.table(file="savew.txt") 
saved 
     words 
apple  10 
pie  14 
orange  5 
fruit  4 
+0

pero no es el OP que desea crear un archivo de texto apropiado a partir de los datos de ocurrencia y leer * que * en R? El asunto 'write.table()' consistía en ver cómo se formateaba el archivo * debe * para su posterior importación en R, conservando los nombres. –

+0

No pensé que el OP fuera particularmente claro. Solo haga referencia a su publicación cruzada en la ayuda de r parecía que ya podría tener un archivo de texto.Esta pregunta parecía preguntar cómo preservar los atributos de un vector nombrado que ya estaba en el espacio de trabajo. –

+0

Ah, está bien. Aún no he visto la publicación de R-Help, rezagada en esa carpeta de correo electrónico. –

Cuestiones relacionadas