Obteniendo las últimas 10 palabras de una cadena, aplicado en un vector de cadenas.
Tengo un vector de textos dentro de un dataframe (df1$text), y estoy tratando de crear un nuevo vector con las últimas 10 palabras del texto (df1$last.ten). He intentado lo siguiente sin éxito:
df1$last.ten = mapply(function(x,y) paste(word(x,y), collapse=" "), df1$text, -1:-10)
Pero en lugar de obtener una cadena de diez palabras, solo obtengo una palabra:
> df1$last.ten[1]
[1] "final."
Funciona correctamente cuando le proporciono una cadena de texto, por lo que parece que estoy utilizando mapply
de manera incorrecta.
He intentado utilizar gsub
para esto, pero no pude entender la sintaxis. Apreciaría una solución utilizando word()
o gsub()
.
davy.ai
Hay varias formas de lograr el resultado deseado, pero una posible solución utilizando el paquete
stringr
es:“`{r}
library(stringr)
df1$last.ten <- str_extract(df1$text, paste(rep(“\S+”, 10), collapse = “\s+(?=\S+$)”))
Este código aplica
str_extract_all
a cada texto endf1$text
, devolviendo una lista de vectores de caracteres. Luego, utilizasapply
para aplicar una función a cada vector de caracteres, que verifica si la longitud es menor que 10 y devuelveNA
en ese caso, o une las palabras con un separador de espacio en caso contrario. Esto devuelve un vector de caracteres con la misma longitud quedf1$text
, conNA
para los textos con menos de 10 palabras.