Nombres de filas en múltiples dataframes con bucle “for” en R
Tengo varios dataframe. Quiero que la primera columna sea el nombre de cada fila.
Puedo hacerlo para 1 dataframe de esta manera:
# Renombrar la fila según el valor en la primera columna
row.names(df1) <- df1[,1]
# Eliminar la primera columna
df1 <- df1[,-1]
Pero quiero hacerlo en varios dataframes. He probado varias estrategias, incluyendo assign y algunos get, pero sin éxito. Aquí están las dos principales formas que he intentado:
“`
Obtener una lista de todos mis dataframes
my_df <- list.files(path = “data”)
Primer estrategia, adaptando lo que funciona para 1 dataframe
for (i in 1:length(files_names)) {
rownames(get(my_df[i])) <- get(my_df[[i]])[,1] # El problema parece estar en esta línea
my_df[i] <- my_df[i][,-1]
}
El error es: No se pudo encontrar la función ‘get->-‘
Segunda estrategia utilizando assign()
for (i in 1:length(my_df)) {
assign(rownames(get(my_df[[i]])), get(my_df[[i]])[,1]) # El problema parece estar en esta línea
my_df[i] <- my_df[i][,-1]
}
El error es: Error in assign(rownames(my_df[i]), get(my_df[[i]])[, 1]) : el primer argumento es incorrecto
Realmente no veo qué me he perdido. Cuando escribo ‘get(my_df[i])’ y ‘get(my_df[[i]])[,1]’, funciona solo en la consola…
Muchas gracias a quienes puedan ayudarme 🙂
davy.ai
Para cambiar el nombre de las filas en múltiples data frames, puedes intentar el siguiente código:
“`{r}
Obteniendo una lista de todos mis data frames
my_df <- list.files(path=”data”, full.names = TRUE)
Iterar a través de cada data frame
for (i in 1:length(my_df)) {
# Leer el data frame
df <- read.csv(my_df[i], header = TRUE)
# Renombrar los nombres de las filas
rownames(df) <- df[,1]
# Eliminar la primera columna
df <- df[,-1]
# Guardar el data frame actualizado
write.csv(df, file = my_df[i], row.names = TRUE)
}
“`
La función
list.files()
devuelve los nombres de los archivos como un vector de caracteres. Sin embargo, también necesitamos la ruta completa del archivo, que se puede obtener estableciendo el argumentofull.names
enTRUE
.En el bucle for, leemos cada archivo usando
read.csv()
, cambiamos los nombres de las filas usandorownames()
, eliminamos la primera columna usando subconjuntos y luego guardamos el data frame actualizado en el archivo original usandowrite.csv()
. Esto actualizará los data frames originales en la carpeta “data” con los nuevos nombres de filas.