r - 从一个数据框列表中设置 colnames 以匹配另一个数据框列表
问题描述
我有两个要组合的数据框列表,但是,它们的列名略有不同,因此我无法对它们进行 rbind。
我希望第二个列表与第一个列表的名称匹配,并且我正在尝试更新第二个列表的名称,以便我可以 rbind。最终产品将用于演示目的。
我的两个数据框列表的一小部分
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), Overall = c("",
"", "", "", "", "")), 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), Overall = c("", "", "", "", "", "")), 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), Overall = c("", "", "", "", "", "")), class = "data.frame", row.names = c(NA,
-6L)))
l2 <- list(Fe = structure(list(V1 = c("Count", "Min", "Max", "Median",
"Mean", "Std Dev", "Coeff. Variation", "Dev. From Cert Mean",
"95% Confidence Interval"), `2` = c("0", " NA", " NA", " NA",
" NaN", " NA", " NA", " NaN", ""), `3` = c("6", "56.18",
"56.83", "56.50", "56.48", "0.218", "0.39", " 0.13", ""), `4` = c("6",
"56.31", "56.53", "56.41", "56.41", "0.080", "0.14", " 0.01",
""), `5` = c("6", "56.29", "56.39", "56.32", "56.33", "0.034",
"0.06", "-0.15", ""), `7` = c("6", "56.40", "56.73", "56.51",
"56.53", "0.125", "0.22", " 0.22", ""), `8` = c("6", "56.26",
"56.53", "56.32", "56.36", "0.116", "0.20", "-0.09", ""), `10` = c("6",
"56.20", "56.70", "56.50", "56.45", "0.176", "0.31", " 0.08",
""), `12` = c("6", "56.10", "56.46", "56.36", "56.29", "0.150",
"0.27", "-0.21", ""), V10 = c("42", "56.10", "56.83", "56.41",
"56.41", "0.153", "0.27", "", "0.08")), class = "data.frame", row.names = c("LabsampSum",
"LabMinSummary", "LabMaxSummary", "LabMedianSummary", "LabMeanSummary",
"lab.SDSummary", "cv.summmary", "LabDevMean.Summary", "analyte.CI.Summary"
)), SiO2 = structure(list(V1 = c("Count", "Min", "Max", "Median",
"Mean", "Std Dev", "Coeff. Variation", "Dev. From Cert Mean",
"95% Confidence Interval"), `2` = c("6", "7.63", "7.73", "7.67",
"7.67", "0.033", "0.44", "-1.09", ""), `3` = c("6", "7.59", "7.84",
"7.72", "7.71", "0.091", "1.18", "-0.55", ""), `4` = c("6", "7.62",
"7.81", "7.70", "7.72", "0.079", "1.02", "-0.48", ""), `5` = c("6",
"7.84", "7.96", "7.89", "7.89", "0.048", "0.61", " 1.75", ""),
`7` = c("6", "7.65", "7.83", "7.76", "7.76", "0.060", "0.77",
" 0.01", ""), `8` = c("6", "7.68", "7.94", "7.83", "7.82",
"0.086", "1.10", " 0.84", ""), `10` = c("6", "7.62", "7.87",
"7.79", "7.77", "0.111", "1.43", " 0.19", ""), `12` = c("6",
"7.64", "7.82", "7.70", "7.70", "0.065", "0.84", "-0.68",
""), V10 = c("48", "7.59", "7.96", "7.74", "7.76", "0.097",
"1.25", "", "0.06")), class = "data.frame", row.names = c("LabsampSum",
"LabMinSummary", "LabMaxSummary", "LabMedianSummary", "LabMeanSummary",
"lab.SDSummary", "cv.summmary", "LabDevMean.Summary", "analyte.CI.Summary"
)), Al2O3 = structure(list(V1 = c("Count", "Min", "Max", "Median",
"Mean", "Std Dev", "Coeff. Variation", "Dev. From Cert Mean",
"95% Confidence Interval"), `2` = c("6", "2.00", "2.03", "2.01",
"2.01", "0.010", "0.52", "-0.16", ""), `3` = c("6", "2.00", "2.03",
"2.01", "2.01", "0.010", "0.52", "-0.16", ""), `4` = c("6", "1.99",
"2.03", "2.01", "2.01", "0.013", "0.66", "-0.49", ""), `5` = c("6",
"2.02", "2.05", "2.02", "2.03", "0.012", "0.58", " 0.50", ""),
`7` = c("0", " NA", " NA", " NA", " NaN", " NA", " NA",
" NaN", ""), `8` = c("6", "2.01", "2.05", "2.04", "2.03",
"0.017", "0.82", " 0.78", ""), `10` = c("6", "1.98", "2.02",
"2.01", "2.01", "0.015", "0.77", "-0.45", ""), `12` = c("0",
" NA", " NA", " NA", " NaN", " NA", " NA", " NaN",
""), V10 = c("36", "1.98", "2.05", "2.01", "2.02", "0.016",
"0.77", "", "0.01")), class = "data.frame", row.names = c("LabsampSum",
"LabMinSummary", "LabMaxSummary", "LabMedianSummary", "LabMeanSummary",
"lab.SDSummary", "cv.summmary", "LabDevMean.Summary", "analyte.CI.Summary"
)))
我努力了
l3 <- lapply(l2, setnames(l2,colnames(l1)))
我收到以下错误消息 Error in setnames(l2, colnames(l1)) : x is not a data.table or data.frame
这对我来说没有意义,因为我将两个列表都设置为具有以下代码的数据框
l2 <- lapply(l2, as.data.frame)
发生此错误我缺少什么?或者我可以强迫 l2 使用 l1 的名字吗?
谢谢
解决方案
您可以Map
在从中提取列名后使用l1
:
l2 <- Map(setNames, l2, lapply(l1, colnames))
rbind
l1
然后,您可以l2
:
Map(rbind, l1, l2)
推荐阅读
- react-native - React Native Navigation with Redux,如何使用?
- selenium - 使用 selenium chrome 驱动程序在 chrome 信息栏上显示自定义消息
- java - 以编程方式在表内创建的 JSF commandLink 不起作用
- config - $wgSitename 中的特殊字符
- python - RuntimeError:PyTorch 目前不提供 PyPI 包
- php - PHP表单提交上的文件上传可选
- java - 数组索引超出try catch中的绑定异常处理
- datatable - 如何在 ComboBox SelectedIndexChanged 事件的文本框中获取 DataTable 列值?
- python-3.x - Holoviews - 选择抛出 AttributeError 的图
- xcode - Xcode Storyboards 现在只显示大纲