我有一个包含几个数据帧的列表,每个数据帧具有相同的结构,并且我想更改所有数据帧的列名。
我尝试过使用dplyr
包中的重命名选项,并使用map将其应用于列表中的每个数据框。
以下是一些代码:
#Generating some data to exemplify the situation
foo = list(testA = as.data.frame(matrix(rnorm(25),ncol = 5)),
testB = as.data.frame(matrix(rnorm(25),ncol = 5)),
testC = as.data.frame(matrix(rnorm(25),ncol = 5)))
#New name for data frame columns
newNames = c('Jan','Feb','Mar','Apr','May')
# Packages
library(dplyr)
library(purrr)
首先,我尝试使用rename_all
中的dplyr
,希望该命令将自动匹配我的newNames
向量中名称(从头到尾)的每一列,但这没有用
foo <- foo %>% rename_all(meses)
然后我尝试创建一个名为renameColumn
的简单函数:
renameColumn = function(myData, new_names){
colnames(data) = new_names
}
并使用map
中的函数。这种方法也行不通。
map(.x = foo,
.f = renameColumn(myData = foo, new_names = newNames))
如何实现最好使用newNames
和dplyr
用map
向量命名所有数据帧列的最终目标?
答案 0 :(得分:3)
如果我们要更改所有列的名称,则更简单的选择是set_names
foo1 <- map(foo, set_names, newNames)
foo1
#$testA
# Jan Feb Mar Apr May
#1 -0.2886904 0.7716465 0.7103408795 -0.3209754 0.1580680
#2 0.8776646 0.1441515 1.9820892400 -2.5664872 0.2014593
#3 -1.9172889 1.4930354 -0.0005122859 2.7473145 0.9806701
#4 -0.7642281 -1.7382739 2.8574676114 0.1905533 1.0760523
#5 -0.2753768 0.4712059 -0.8955168101 -0.3923635 1.1017868
#$testB
# Jan Feb Mar Apr May
#1 -1.2544946 -0.2131777 0.634624485 1.5436530 0.5811060
#2 -0.8092116 1.6085164 2.607820897 0.5454936 1.3869741
#3 -0.5460344 0.8028537 -0.007151318 -0.1711816 0.0867885
#4 -0.2104260 -1.3580934 0.835981664 1.3725253 0.0037494
#5 -0.6984177 1.2311613 -0.809374023 -0.2487121 0.8129935
#$testC
# Jan Feb Mar Apr May
#1 0.3667708 -0.01209575 -0.9314844 0.05995604 0.58699473
#2 1.4171330 0.62793554 -0.2695517 2.21667643 0.90599396
#3 1.7093434 -0.98627309 -1.7552439 -0.96652771 -0.05704485
#4 0.2860338 1.34541312 -1.9608085 -1.23959279 0.19175618
#5 -0.9364102 2.47658828 -1.4883768 0.64809561 -0.99417796
,或者如果我们使用rename_all
,请确保使用~
。根据{{1}},?rename_all
参数为
.funs-函数fun,purrr样式lambda〜fun(。)或任何一种形式的列表。
.funs
在功能foo2 <- map(foo, ~ .x %>%
rename_all(~ newNames))
identical(foo1, foo2)
#[1] TRUE
中,有两个问题-1)renameColumn
中没有任何内容。 2)参数不匹配-函数参数(return
)与内部参数(myData
)
data