es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 🙂

Tags:  , , ,

Answer

  1. Avatar for 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 argumento full.names en TRUE.

    En el bucle for, leemos cada archivo usando read.csv(), cambiamos los nombres de las filas usando rownames(), eliminamos la primera columna usando subconjuntos y luego guardamos el data frame actualizado en el archivo original usando write.csv(). Esto actualizará los data frames originales en la carpeta “data” con los nuevos nombres de filas.

Comments are closed.