Saltar al contenido

R eliminar palabras vacías de un vector de caracteres usando %in%

Te recomendamos que revises esta respuesta en un ambiente controlado antes de enviarlo a producción, un saludo.

Solución:

No está accediendo a la lista correctamente y no está recuperando los elementos del resultado de %in% (que da un vector lógico de VERDADERO/FALSO). Deberías hacer algo como esto:

unlist(str1)[!(unlist(str1) %in% stopWords)]

(o)

str1[[1]][!(str1[[1]] %in% stopWords)]

Por todo data.frame df1, podrías hacer algo como:

'%nin%' <- Negate('%in%')
lapply(df1[,2], function(x) 
    t <- unlist(strsplit(x, " "))
    t[t %nin% stopWords]
)

# [[1]]
# [1] "string"  "string."
# 
# [[2]]
# [1] "string"   "slightly" "string." 
# 
# [[3]]
# [1] "string"  "string."
# 
# [[4]]
# [1] "string"   "slightly" "shorter"  "string." 
# 
# [[5]]
# [1] "string"   "string"   "strings."

Primero. deberías deslistar str1 o usar lapply si str1 es vectorial:

!(unlist(str1) %in% words)
#>  [1]  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE

Segundo. Solución compleja:

string <- c("This string is a string.",
            "This string is a slightly longer string.",
            "This string is an even longer string.",
            "This string is a slightly shorter string.",
            "This string is the longest string of all the other strings.")
rm_words <- function(string, words) 
    stopifnot(is.character(string), is.character(words))
    spltted <- strsplit(string, " ", fixed = TRUE) # fixed = TRUE for speedup
    vapply(spltted, function(x) paste(x[!tolower(x) %in% words], collapse = " "), character(1))

rm_words(string, tm::stopwords("en"))
#> [1] "string string."                  "string slightly longer string."  "string even longer string."     
#> [4] "string slightly shorter string." "string longest string strings."

Reseñas y valoraciones del tutorial

Tienes la opción de añadir valor a nuestro contenido tributando tu experiencia en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *