我得到了这些原始数据库导出来修复。在SQL
中有两个表,每个表有三列:ID,名字和姓氏。在sheet1
中,ID列在开头为空,而sheet2
中有ID。我需要加入sheet1
和sheet2
,其中名字和姓氏都匹配,如果匹配中sheet2
中存在ID,则将其设置在{{1}的ID列中}}。非常简单的SQL查询:
sheet1
由于这是一项需要经常完成的任务,我想做的就是用一个简单的R脚本建立我不那么精明的同事。不过,我还是R的初学者。目前,我通过原生R方法在两个data.frames中描述了UPDATE sheet1
JOIN sheet2
ON sheet1.NAME_LAST = sheet2.Last_Name
AND sheet1.NAME_FIRST = sheet2.First_Name
SET sheet1.CONSTITUENT_ID = sheet2.ID
和sheet1
(描述性很好地命名为book1和book2):sheet2
通过一些谷歌搜索有人建议我看看data.table库,但我仍然有点失落,从哪里开始。有人可以帮我把SQL翻译成R吗?
答案 0 :(得分:2)
虽然SQL是一种特殊用途的语言,在很大程度上是id声明和基于集合的,但R是一种函数式编程语言。通常很难进行直接语言翻译。使用base R,您可能会使用merge()
命令将不同的表放在一起。
如果我们有这些样本表
sheet1<-data.frame(
NAME_LAST=letters[1:10],
NAME_FIRST=letters[11:20],
SEX=sample(c("M","F"), 10, replace=T)
)
sheet2<-data.frame(
Last_Name=letters[1:10],
First_Name=letters[11:20],
ID = sample(100:200, 10)
)[sample(1:10), ]
sheet1;sheet2;
然后我们可以将它们与
合并mm<-merge(sheet1, sheet2,
by.x=c("NAME_LAST","NAME_FIRST"),
by.y=c("Last_Name","First_Name")
)
mm;
您可以将这些合并的数据集子集化,以获得所需的内容。