【发布时间】:2018-01-08 19:50:53
【问题描述】:
鉴于这些示例性数据集(1 和 2):
如何合并每个数据集(1 和 2)
使用codes 数据集,以便将名称codes$id 映射(同步?)到colnames
dataset1 和 dataset2 匹配的位置。
codes 是描述测量站的数据对象。dataset1 和 dataset2 是来自一些具有混乱列命名的站的测量 - 没有实际模式,除了“station#”部分.
codes<- data.frame(
id=c("MotherStation", "station2", "station3",
"station4", "stationFive", "station6"),
id2=c("a", "b", "c", "d", "e", "f"),
var1= seq(1:6),
var2= seq(1:6))
dataset1 <- data.frame("291_hhaMotherStation_1g44" = rnorm(6),
"143_wwaStation4_1d21"=rnorm(6))
dataset2 <- data.frame("143_wwaStation4_1d21" = rnorm(6),
"station2WWa" = rnorm(6),
"KrkStation6"=rnorm(6))
我要找的结果是这样的:
newData1 <- data.frame(MotherStation = dataset1$X291_hhaMotherStation_1g44,
station4 = dataset1$X143_wwaStation4_1d21)
newData2 <- data.frame(station4 = dataset2$X143_wwaStation4_1d21,
station2 = dataset2$station2WWa,
station6 = dataset2$KrkStation6)
我确实觉得,dplyrjoins 和一些与 RegEx 匹配的字符串可以让我到达那里,但我被卡住了(几乎每次涉及 RegEx 时都会发生这种情况)。
编辑:在阅读Jennifer 答案后,我修改了我的示例代码以匹配更一般的情况,其中codes 数据帧中的ids 不一定由粘贴到station 的唯一编号标识,但可以实际上仅由字符串表示。
【问题讨论】:
-
newData也更新了吗? -
我不确定我是否理解。
newData行与dataset行相同。newData列有名称,从匹配的id映射到codes。不匹配的列保留其原始名称