如何将数据框名称添加到多个数据框的列

时间:2018-01-13 03:09:26

标签: r lapply

目标是重命名数据框列的列,但将数据框名添加到新列名中。

ex:从x到a_x和b_x。

为什么呢?因为我计划稍后合并集合,并希望列的清洁ID。

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 个答案:

答案 0 :(得分:2)

这是给你的一种方式。我使用[wcp-carousel id="37122"] 的长度遍历frameList中的每个数据框。对于每个数据框中的列名,我使用了数据框的名称(即frameList)并将其过去到数据框中的列名。

names(frameList)

答案 1 :(得分:1)

或另一个选项是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))