将简单的UPDATE / JOIN从SQL转换为R

时间:2014-05-06 18:02:07

标签: sql r dataframe data.table

我得到了这些原始数据库导出来修复。在SQL中有两个表,每个表有三列:ID,名字和姓氏。在sheet1中,ID列在开头为空,而sheet2中有ID。我需要加入sheet1sheet2,其中名字和姓氏都匹配,如果匹配中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吗?

1 个答案:

答案 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;

您可以将这些合并的数据集子集化,以获得所需的内容。