Переименование нескольких столбцов во фреймах данных, хранящихся в списке одновременно - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть следующий список, который содержит несколько фреймов данных, которые имеют одинаковые имена столбцов:

my_list <- list(df1 = data.frame(A = c(1:3), B = c(4:6), C = c(7:9)), 
                df2 = data.frame(A = c(1:4), B = c(5:8), C = c(9:12)), 
                df3 = data.frame(A = c(1:5), B = c(6:10), C = c(11:15)))

Существует ли эффективный способ переименовать все столбцы A s в каждом фрейме данных всписок одновременно с использованием базовых функций R?

Я думал, что что-то вроде

names(lapply(my_list, `[[`, "A")) <- "new_name"

может работать, но я думаю, что я не в курсе - функция lapply возвращает объект, которыйможет не сработать для того, что я пытаюсь сделать.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Еще несколько базовых опций:

# rename first column name
lapply(my_list, function(x) setNames(x, replace(names(x), 1, "new_name_for_A")))

# rename column named "A"
lapply(my_list, function(x) setNames(x, replace(names(x), names(x) == "A", "new_name_for_A")))

# lowly for loop
for (i in seq_along(my_list)) {
  names(my_list[[i]])[names(my_list[[i]]) == "A"] = "new_name_for_A"
}
0 голосов
/ 22 февраля 2019

Как насчет

new.names = c('New', 'B', 'C')
lapply(my_list, `names<-`, new.names)

Для добавленного примера в вашем редактировании вы просто измените его на

new.names = sub('B', 'New', names(my_list[[1]]))
0 голосов
/ 22 февраля 2019

Мы можем использовать map для циклического перебора list и переименования столбца с именем «A» в «new_name» с rename_at

library(purrr)
library(dplyr)
map(my_list, ~ .x %>% 
                   rename_at(vars("A"), ~ "new_name"))

или с base R с помощьюиспользование анонимного вызова функции

lapply(my_list, function(x) {names(x)[names(x) == "A"] <- "new_name"; x})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...