Как добавить имя 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))