r - 为数据框列表中的每个数据框的每个列名称添加前缀 R
问题描述
我想为数据框列表中每个数据框中的每一列(第一列除外)添加一个前缀。我一直在采用用于单个数据框的方法,并尝试同时使用 lapply 和 Map 但没有成功。
我还想通过将数据框的名称添加为现有名称的前缀来更改每个数据框的第一列
我的数据框列表的片段
l1 <- list(Fe = structure(list(Determination_No = 1:6, `2` = c(55.94,
55.7, 56.59, 56.5, 55.98, 55.93), `3` = c(56.83, 56.54, 56.18,
56.5, 56.51, 56.34), `4` = c(56.39, 56.43, 56.53, 56.31, 56.47,
56.35), `5` = c(56.32, 56.29, 56.31, 56.32, 56.39, 56.32), `7` = c(56.48,
56.4, 56.54, 56.43, 56.73, 56.62), `8` = c(56.382, 56.258, 56.442,
56.258, 56.532, 56.264), `10` = c(56.3, 56.5, 56.2, 56.5, 56.7,
56.5), `12` = c(56.11, 56.46, 56.1, 56.35, 56.36, 56.37)), class = "data.frame", row.names = c(NA,
-6L)), SiO2 = structure(list(Determination_No = 1:6, `2` = c(7.63,
7.65, 7.73, 7.67, 7.67, 7.67), `3` = c(7.84, 7.69, 7.59, 7.77,
7.74, 7.64), `4` = c(7.67, 7.74, 7.62, 7.81, 7.66, 7.8), `5` = c(7.91,
7.84, 7.96, 7.87, 7.84, 7.92), `7` = c(7.77, 7.83, 7.76, 7.78,
7.65, 7.74), `8` = c(7.936, 7.685, 7.863, 7.838, 7.828, 7.767
), `10` = c(7.872684992, 7.851291827, 7.872684992, 7.722932832,
7.680146501, 7.615967003), `12` = c(7.64, 7.71, 7.71, 7.65, 7.82,
7.68)), class = "data.frame", row.names = c(NA, -6L)), Al2O3 = structure(list(
Determination_No = 1:6, `2` = c(2.01, 2.02, 2.03, 2.01, 2.02,
2), `3` = c(2.01, 2.01, 2, 2.02, 2.02, 2.03), `4` = c(2,
2.03, 1.99, 2.01, 2.01, 2.01), `5` = c(2.02, 2.02, 2.05,
2.03, 2.02, 2.03), `7` = c(1.88, 1.9, 1.89, 1.88, 1.88, 1.87
), `8` = c(2.053, 2.044, 2.041, 2.038, 2.008, 2.02), `10` = c(2.002830415,
2.021725042, 2.021725042, 1.983935789, 2.002830415, 2.021725042
), `12` = c(2.09, 2.05, 1.96, 2.09, 2.06, 2.02)), class = "data.frame", row.names = c(NA,
-6L)))
我试过以下
colnames(l1[-1]) <- lapply(l1[-1],paste0("Lab-",colnames(l1[-1])))
colnames(l1[-1]) <- Map(paste("Lab",colnames(l1[-1]),sep=" "),l1[-1])
无论哪种解决方案,我都会收到以下错误消息
获取错误(as.character(FUN),模式=“功能”,环境=环境):找不到模式“功能”的对象“实验室-”
不知道是什么问题
谢谢
解决方案
在tidyverse
中,我们可以使用imap
with rename_with
:
library(dplyr)
library(purrr)
imap(l1, ~.x %>%
rename_with(function(x) c(paste(.y, x[1], sep = '_'), paste0('lab_', x[-1]))))
#$Fe
# Fe_Determination_No lab_2 lab_3 lab_4 lab_5 lab_7 lab_8 lab_10 lab_12
#1 1 55.94 56.83 56.39 56.32 56.48 56.382 56.3 56.11
#2 2 55.70 56.54 56.43 56.29 56.40 56.258 56.5 56.46
#3 3 56.59 56.18 56.53 56.31 56.54 56.442 56.2 56.10
#4 4 56.50 56.50 56.31 56.32 56.43 56.258 56.5 56.35
#5 5 55.98 56.51 56.47 56.39 56.73 56.532 56.7 56.36
#6 6 55.93 56.34 56.35 56.32 56.62 56.264 56.5 56.37
3$SiO2
# SiO2_Determination_No lab_2 lab_3 lab_4 lab_5 lab_7 lab_8 lab_10 lab_12
#1 1 7.63 7.84 7.67 7.91 7.77 7.936 7.872685 7.64
#2 2 7.65 7.69 7.74 7.84 7.83 7.685 7.851292 7.71
#3 3 7.73 7.59 7.62 7.96 7.76 7.863 7.872685 7.71
#4 4 7.67 7.77 7.81 7.87 7.78 7.838 7.722933 7.65
#5 5 7.67 7.74 7.66 7.84 7.65 7.828 7.680147 7.82
#6 6 7.67 7.64 7.80 7.92 7.74 7.767 7.615967 7.68
#$Al2O3
# Al2O3_Determination_No lab_2 lab_3 lab_4 lab_5 lab_7 lab_8 lab_10 lab_12
#1 1 2.01 2.01 2.00 2.02 1.88 2.053 2.002830 2.09
#2 2 2.02 2.01 2.03 2.02 1.90 2.044 2.021725 2.05
#3 3 2.03 2.00 1.99 2.05 1.89 2.041 2.021725 1.96
#4 4 2.01 2.02 2.01 2.03 1.88 2.038 1.983936 2.09
#5 5 2.02 2.02 2.01 2.02 1.88 2.008 2.002830 2.06
#6 6 2.00 2.03 2.01 2.03 1.87 2.020 2.021725 2.02
或在基数 R 中Map
:
Map(function(x, y) {
names(x) <- c(paste(y, names(x)[1], sep = '_'), paste0('lab_', names(x[-1])))
x
}, l1, names(l1))
推荐阅读
- xamarin - 无法在发布模式下构建 Xamarin Android 应用程序
- docker - CentOS6.5如何指定docker的安装路径?
- firebase - firebase 云消息传递目标段未激活
- testing - 如何使用 flutter_redux 测试 Flutter 应用程序?
- node.js - 如何从续集中收到的对象中删除属性?
- excel - 在删除它们之前获取重复的数量
- python - 如何使用 PyQt5 在编辑器旁边打印文本
- python - 元类的 Pytest 夹具
- javascript - 带有 Mongoose 的 Nodejs 返回一个对象值而不是数组中的多个
- django - 我将序列化程序创建方法用于什么?