Как добавить имя Dataframe в столбцы из нескольких Dataframes

Цель состоит в том, чтобы переименовать список столбцов данных, но при этом добавить имя файла в новое имя столбца.

например: от x до a_x и b_x.

Зачем? Потому что я планирую позже объединить наборы и хотел бы чистые идентификаторы для столбцов.

a = data.frame(x = c(1,2))
b = data.frame(x = c(3,4))

frameList = list(a = a, b = b)

newName = c(*frameName+'_'+'x')
names = lapply(names, setNames, nm = newName)
list2env(names,.GlobalEnv)

2 ответа

Решение

Вот один из способов для вас. Я перебрал каждый кадр данных в frameList используя длину frameList, Для имен столбцов в каждом фрейме данных я взял имя фрейма данных (т.е. names(frameList)) и вставьте его в имена столбцов во фрейме данных.

a = data.frame(x = c(1,2), y = 1:2)
b = data.frame(x = c(3,4), y = 1:2)

frameList = list(a = a, b = b)

lapply(1:length(names(frameList)), function(x) {

       names(frameList[[x]]) <- paste(names(frameList)[x], names(frameList[[x]]), sep = "_")

       return(frameList[[x]])

})

[[1]]
  a_x a_y
1   1   1
2   2   2

[[2]]
  b_x b_y
1   3   1
2   4   2

Или другой вариант Map

Map(function(x, y) setNames(x, paste(y, names(x),  sep="_")), frameList, names(frameList))
#$a   
#   a_x a_y
#1   1   1
#2   2   2

#$b
#  b_x b_y
#1   3   1
#2   4   2

Или с tidyverse

library(purrr)
library(dplyr)
f1 <- function(x, y) paste(y, x, sep="_")
map2(frameList, names(frameList), ~ .x %>% 
                                      rename_all(f1, .y))

Если нам нужно в обратном порядке, это более просто

map2(frameList, names(frameList), ~ .x %>%
                            rename_all(paste, sep="_", .y))
Другие вопросы по тегам