【发布时间】:2018-05-25 17:35:48
【问题描述】:
我正在尝试加入两个数据框。然而,与普通连接不同,我想将第一列中的一系列列与第二列相匹配。
基本上我有一个站点列表,其中引用了最近的周围站点。我需要在单独的数据框中查找最近的站点完整仪表和 LTA ID。我提供了一些示例数据框,包括示例输出,但实际情况并非如此整洁(并且有更多的列和行),这就是为什么我需要在 TestRefList 中查找 Surrogate 仪表的原因,而不是在下面的方法中创建。
library(plyr)
library(tidyverse)
TestRefList <- data.frame(Site = paste0("sl",1:10,".1"), Gauge = paste0(1:10,".1","/110.00/1"), LTA = paste0(1:10,".1","/110.99/1"), stringsAsFactors = F)
Surrogates <- data.frame(Primary = paste0("sl",c(2,4,6),".1"), nearest1=paste0("sl",1:3,".1"), nearest2=paste0("sl",7:9,".1"), stringsAsFactors = F)
HopefulOutput <- data.frame(Primary = paste0("sl",c(2,4,6),".1"), nearest1=paste0("sl",1:3,".1"), nearest2=paste0("sl",7:9,".1"),
nearest1Gauge = paste0(1:3,".1","/110.00/1"), nearest1LTA = paste0(1:3,".1","/110.99/1"),
nearest2Gauge = paste0(7:9,".1","/110.00/1"), nearest2LTA = paste0(7:9,".1","/110.99/1"), stringsAsFactors = F)
我认为我可以使用 plyr::ldply 和 dplyr::left_join 的某种组合,例如: 输出
但是,我无法使用列表中的名称加入工作。我已经在列表之外尝试过,在等号周围有一些 " 和 ' 的排列,例如:
left_join(Surrogates,TestRefList, by = c(paste0('"',names(Surrogates)[2],'"' , '="Site"')))
即使我可以让这部分工作,我也不确定它在 ldply 中是如何工作的。
有什么想法吗?如果有必要,我很高兴以一种完全不同的方式来解决这个问题,尽管我对 data.frames 和 tidyverse 比 data.table 选项更舒服
【问题讨论】:
-
如果有任何答案满足您的需求,请“采纳”!谢谢。