gpt4 book ai didi

r - 如何更改列表中所有数据框中的列名?

转载 作者:行者123 更新时间:2023-12-04 01:41:27 28 4
gpt4 key购买 nike

我有一个包含多个数据框的列表,每个数据框都具有相同的结构,我想更改所有数据框的列名。

我尝试过使用 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)

首先,我尝试使用 dplyr 中的 rename_all 希望该命令会自动将每一列与我的 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))

如何使用 dplyrmap 实现使用 newNames 向量命名所有数据框列的最终目标?

最佳答案

如果我们要更改所有列的名称,一个更简单的选项是 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,请确保使用~。根据 ?rename_all.funs 参数将是

.funs - A function fun, a purrr style lambda ~ fun(.) or a list of either form.

foo2 <- map(foo, ~ .x %>%
rename_all(~ newNames))

identical(foo1, foo2)
#[1] TRUE

在函数 renameColumn 中,有两个问题 - 1) 没有returned。 2) 参数不匹配 - 函数参数 (myData) 与内部使用的参数 (data) 不同

renameColumn = function(myData, new_names){
colnames(myData) <- new_names
myData
}

map(foo, renameColumn, new_names = newNames)

关于r - 如何更改列表中所有数据框中的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57186628/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com