首页 > 解决方案 > 如何根据列表名称更改 colnames?

问题描述

我正在学习 R 并且我有一个简单的问题,即如何colnames根据列表的名称更改特定的。例如,我有一个列表Combined

Combined = list(L1 = mtcars[1:3,], L2 = mtcars[11:13,])

我想将第 5 列分别更改为“L1”和“L2”,例如

$L1
                   mpg cyl  disp  hp   L1    wt  qsec vs am gear carb
Mazda RX4         21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1

$L2
                     mpg cyl  disp  hp   L2    wt  qsec vs am gear carb
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3

所以我尝试了

lapply(Combined, function(x) {colnames(x)[5] <- names(x); x}) 

但它没有用。任何人都可以帮忙吗?谢谢!

标签: rlist

解决方案


imap这是with的一个选项rename_atimap用于map2返回 in 的值和 in的.x名称。然后,我们只需要列的位置来重命名它,这可以完成(它将索引或名称作为字符串)list.yrename_at

library(purrr)
imap(Combined, ~ {nm1 <- .y
           .x %>% 
                rename_at(5,  ~nm1)
    })

base RMap

Map(function(dat, nm) {names(dat)[5] <- nm; dat}, Combined, names(Combined))
#$L1
#               mpg cyl disp  hp   L1    wt  qsec vs am gear carb
#Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1

#$L2
#            mpg cyl  disp  hp   L2   wt qsec vs am gear carb
#Merc 280C  17.8   6 167.6 123 3.92 3.44 18.9  1  0    4    4
#Merc 450SE 16.4   8 275.8 180 3.07 4.07 17.4  0  0    3    3
#Merc 450SL 17.3   8 275.8 180 3.07 3.73 17.6  0  0    3    3

推荐阅读