work suggestions putting para many how hashtags generador first español does comment buscador are allowed r apply data.table

suggestions - how many hashtags are allowed on instagram



¿Cómo ejecuto aplicar en una tabla de datos? (2)

Tengo una data.table con las columnas 2 a 20 como cadenas con espacios (por ejemplo, "Nombre de la especie"). Quiero ejecutar str_replace() en todas esas columnas simultáneamente para que todo el "Nombre de la especie" se convierta en "Nombre de la especie". Yo tampoco puedo hacer:

data.table(apply(as.data.frame(dt[,2:dim(dt)[2], with=F]), 2, function(x){ str_replace(x," ","_") }))

o si lo guardo como un objeto data.table , entonces puedo hacer esto una columna a la vez:

dt[,SpeciesName := str_replace(SpeciesName, " ", "_")

¿Cómo hago esto para todas las columnas 2 hasta el final similar a la de la anterior?


Puedes hacerlo:

library("stringr") dt[, -1] <- lapply(dt[, -1], function(x) str_replace(x," ","_"))


Completamente reescrito el 2015-11-24, para corregir un error en versiones anteriores.

Tienes pocas opciones.

  1. Procese todas las columnas de destino con una llamada incorporada a lapply() , utilizando := para asignar los valores modificados en su lugar. Esto se basa en el muy práctico soporte de := para la asignación simultánea a varias columnas nombradas en su LHS.

  2. Use un bucle for para ejecutar las columnas de destino una a la vez, usando set() para modificar el valor de cada una.

  3. Use un bucle for para iterar sobre múltiples llamadas "ingenuas" a [.data.table() , cada una de las cuales modifica una sola columna.

Todos estos métodos parecen igualmente rápidos, por lo que el que uses será principalmente cuestión de gustos. (1) es muy compacto y expresivo. Es lo que uso con más frecuencia, aunque puede encontrar (2) más fácil de leer. Debido a que procesan y modifican las columnas de una en una, (2) o (3) tendrán una ventaja en la rara situación en la que su tabla de datos es tan grande que corre el peligro de toparse con los límites impuestos por su R Memoria disponible de la sesión.

library(data.table) ## Create three identical 1000000-by-20 data.tables DT1 <- data.table(1:1e6, as.data.table(replicate(1e6, paste(sample(letters, nr, TRUE), sample(letters, nr, TRUE))))) cnames <- c("ID", paste0("X", 1:19)) setnames(DT1, cnames) DT2 <- copy(DT1); DT3 <- copy(DT1) ## Method 1 system.time({ DT1[, cnames[-1] := lapply(DT1[,cnames[-1],with=FALSE], function(x) gsub(" ", "_", x))] }) ## user system elapsed ## 10.90 0.11 11.06 ## Method 2 system.time({ for(cname in cnames[-1]) { set(DT2, j=cname, value=gsub(" ", "_", DT2[[cname]])) } }) ## user system elapsed ## 10.65 0.05 10.70 ## Method 3 system.time({ for(cname in cnames[-1]) { DT3[ , cname := gsub(" ", "_", DT3[[cname]]), with=FALSE] } }) ## user system elapsed ## 10.33 0.03 10.37

Para obtener más detalles sobre set() y := , lea la página de ayuda que se obtiene al escribir ?set o ?":=" .