r - 如何根据列表名称更改 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})
但它没有用。任何人都可以帮忙吗?谢谢!
解决方案
imap
这是with的一个选项rename_at
。 imap
用于map2
返回 in 的值和 in的.x
名称。然后,我们只需要列的位置来重命名它,这可以完成(它将索引或名称作为字符串)list
.y
rename_at
library(purrr)
imap(Combined, ~ {nm1 <- .y
.x %>%
rename_at(5, ~nm1)
})
或base R
与Map
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
推荐阅读
- php - 默认情况下,如何在 unirest for php 中将响应主体类型 stdObject 更改为关联数组
- xcode - 在 Xcode 中运行的 Build 和 Build 有什么区别
- firebase - Getter uid 在 Flutter Fire 中被调用为 null
- python - 无法让 Selenium WebDriver 在 Mac 上工作
- angular - 角度 6 到 8,角度通用,请通过“文件”或“包含”属性确保它在您的 tsconfig 中
- javascript - 如何在 sapper 上获得正确的 http 状态代码?
- c# - 如何查看播放音频文件的进度?
- java - 是否可以在 Java 中使用泛型 Consumer 作为函数参数?
- python - 如何使用 python 请求调用 Twitter oEmbed API?
- c++ - 如何在不使用 to_string 或逐个提取位的情况下提取大于 unsigned long long 的位集子集?