Tener un marco de datos como este:

data.frame(id = c(1,2,3,4), text = c("text, another, end","not, keep","not, to keep, this","finally, chance, to, check"))

¿Cómo es posible detectar cuál es la última coma en la columna de texto de cada fila y eliminar lo que esté antes de esto?

Ejemplo de salida esperada:

data.frame(id = c(1,2,3,4), text = c("end","keep","this","check"))
r
1
Nathalie 28 abr. 2020 a las 14:10

3 respuestas

La mejor respuesta

Con sub, podemos eliminar todo el contenido hasta la coma final, incluida la coma final, más cualquier espacio en blanco que pueda seguir a esa coma final.

df$text <- sub("^.*,\\s*", "", df$text)
df

id  text
1  1   end
2  2  keep
3  3  this
4  4 check

Datos:

df <- data.frame(id = c(1,2,3,4),
                 text = c("text, another, end","not, keep",
                          "not, to keep, this","finally, chance, to, check"))
2
Tim Biegeleisen 28 abr. 2020 a las 11:12

Base R, más detallada, menos eficiente, sin expresiones regulares:

df <- sapply(strsplit(as.character(df$text), ", "), function(x){x[length(x)]})
1
hello_friend 28 abr. 2020 a las 12:44

Las expresiones regulares son codiciosas por naturaleza, por lo que realmente no necesita encontrar la última coma per se

sub('.*, ', '', df$text)
#[1] "end"   "keep"  "this"  "check"
1
Ronak Shah 28 abr. 2020 a las 11:14