es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema fundamental – Frecuencias de palabras/histograma en R.

He pasado todo el día en esto y no puedo encontrar mi error. Estoy seguro de que alguien más podrá detectarlo en un segundo (por lo cual estaré agradecido).

Tengo algunos archivos de texto que necesito analizar; no importa lo que haya en ellos (usa Lorem Ipsum como ejemplo reproducible). Estoy en la etapa de Análisis Exploratorio de Datos (EDA, por sus siglas en inglés). Mi código se ve así:

“`{r}
lorem <- readLines("lorem.txt", skipNul = TRUE) # Leer los datos; esto funciona

<pre><code><br /><br /><br /><h1>Funciones de stringi</h1>

“`{r}
library(stringi)

Contar palabras en cada entrada; esto también funciona bien

“`{r}
lorem_wc <- data.frame(stri_count_words(lorem))

<pre><code><br />Esto produce un data frame con una columna con el número de palabras en cada línea; hasta ahora, esto funciona muy bien. Ahora me gustaría crear un histograma (es decir, ver una distribución de las frecuencias de conteo de palabras); el número de palabras estaría en el eje horizontal y la frecuencia de cada una estaría en el eje vertical. Mi idea era la siguiente:

“`{r}
lorem_df <- table(lorem_wc)

Esto produce algo que no quiero (en realidad, no estoy seguro de qué es esto, pero claramente no es lo que quiero: es una sola fila de información, pero no entiendo qué calculó R. Si intento esto:

“`{r}
lorem_df <- data.frame(table(stri_count_words(lorem)))

<pre><code><br />Obtengo la misma información, pero ahora en una columna en lugar de una fila. El contenido aún no es lo que esperaría. Así que creé un archivo de prueba y hice lo mismo:

“`{r}
testfile <- readLines(“test.txt”, skipNul = TRUE)
testtab <- data.frame(table(stri_count_words(testfile)))

Cuando imprimo testtab, se ve como un data frame de dos columnas; la primera columna se llama Var1 y parece ser el número de palabras por línea en el archivo de texto llamado “test.txt”. La segunda columna se llama Freq y parece ser la frecuencia que acompaña al número de palabras en la primera columna.

Ahora uso ggplot para generar un histograma:

{r}
g <- ggplot(testtab, aes(x = Var1))
g <- g + geom_histogram()
g

… lo cual arroja un error: Error: StatBin requires a continuous x variable: the x variable is discrete. Perhaps you want stat="count"?

Estoy seguro de que esto es trivial, pero aparentemente me he bloqueado completamente.

Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema es que testtab tiene una columna llamada Var1 que contiene valores discretos (número de palabras por línea) en lugar de una variable continua (que requiere geom_histogram()). Una forma de solucionar esto sería utilizar stat_count() en lugar de geom_histogram():

    {r}
    g <- ggplot(testtab, aes(x = Var1))
    g <- g + stat_count()
    g

    Esto debería darte un histograma con el número de palabras en el eje X y la frecuencia en el eje Y.

Comments are closed.