Tengo un data.table
con las columnas 2 a la 20 como cadenas con espacios (por ejemplo, "Nombre de la especie"). Deseo ejecutar str_replace()
en todas esas columnas simultáneamente para que todo el "Nombre de la especie" se convierta en "Nombre_especie". Puedo hacer cualquiera:¿Cómo ejecuto apply en data.table?
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 yo puedo hacer esto una columna a la vez:
dt[,SpeciesName := str_replace(SpeciesName, " ", "_")
¿Cómo se hace esto para todas las columnas 2 a el final similar al de arriba?
Este es un caso interesante. Aquí, 19 columnas de 20 están siendo reemplazadas; el RHS de ': =' es casi toda la tabla. La ventaja de ': =' es mayor cuando, por ejemplo, una o dos columnas se agregan a 20, o una o dos columnas de 20 se modifican. En esos casos, la mayoría de las columnas se dejan en su lugar y ': =' es mucho más rápido que copiar toda la tabla. –
Además, 'set()' es una función nueva en v1.8.0 (aún no está en CRAN) que proporciona funcionalidad ': =' directamente. 'set()' puede ser mucho más rápido que ': =' cuando se asigna dentro de un bucle (para una programación más natural). Hay un ejemplo en las últimas NOTICIAS en la página de inicio. –
@MatthewDowle - Gracias por sus comentarios.Me recordaron que, durante el fin de semana, había tenido una sensación persistente sobre la respuesta que había dado aquí, y me animaron a volver a visitar esto. Obviamente tenía buenas razones para sentirme molesto. Por favor, eche un vistazo a mi respuesta revisada. También ** agregue cualquiera de las sugerencias que tiene en sus comentarios al texto de mi respuesta **, donde cree que podrían ayudar. Echaré un vistazo a 'set()', pero aún no me siento calificado para discutirlo. Y, una vez más, ¡gracias por todo el trabajo que dedica al desarrollo continuo del paquete data.table! –