Estas preguntas:

Cambiar nombres de columna en una lista de marcos de datos en R

Cambiar nombres en una lista de marcos de datos

Ambos tienen excelentes soluciones para cambiar los nombres de columna, pero el único nombre de columna que quiero cambiar es la primera columna. Los marcos de datos en mi lista solo tienen la primera columna en común.

Aquí hay un ejemplo reproducible del problema que estoy teniendo:

df1 <- data.frame(A = 1:5, B = 1:5)
df2 <- data.frame(A = 11:15, B = 21:25)
ldf <- list(df1, df2)
ldf <- lapply(ldf, setNames, "State")
L
[[1]]
  State NA
1     1  1
2     2  2
3     3  3
4     4  4
5     5  5

[[2]]
  State NA
1    11 21
2    12 22
3    13 23
4    14 24
5    15 25

¿Cómo especifico una sola columna en lapply y dejo el resto solo?

1
RAFrancais 25 dic. 2019 a las 09:22

2 respuestas

La mejor respuesta

Nosotras podemos usar lapply como:

lapply(ldf, function(x) {names(x)[1] <- "State";x})

#[[1]]
#  State B
#1     1 1
#2     2 2
#3     3 3
#4     4 4
#5     5 5

#[[2]]
#  State  B
#1    11 21
#2    12 22
#3    13 23
#4    14 24
#5    15 25
3
Ronak Shah 25 dic. 2019 a las 06:28

Nosotras podemos usar rename_at

library(purrr)
library(dplyr)
map(ldf, ~ .x %>%
              rename_at(1, ~ "State"))
#[[1]]
#  State B
#1     1 1
#2     2 2
#3     3 3
#4     4 4
#5     5 5

#[[2]]
#  State  B
#1    11 21
#2    12 22
#3    13 23
#4    14 24
#5    15 25

O con select

map(ldf, ~ .x %>%
             select(State = 1, everything()))

O usando setnames de data.table

library(data.table)
lapply(ldf, setnames, old = 1, new = 'State')
ldf
#[[1]]
#  State B
#1     1 1
#2     2 2
#3     3 3
#4     4 4
#5     5 5

#[[2]]
#  State  B
#1    11 21
#2    12 22
#3    13 23
#4    14 24
#5    15 25

O usando base R

lapply(ldf, setNames, c("State", names(ldf[[1]][-1])))
2
akrun 25 dic. 2019 a las 16:14