首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将外键上的SQL连接转换为R data.table语法

将外键上的SQL连接转换为R data.table语法
EN

Stack Overflow用户
提问于 2012-03-29 03:58:25
回答 1查看 6.4K关注 0票数 20

SQL包提供了许多与data.table相同的表处理方法。如果表有键,则该键由一个或多个列组成。但是一个表不能有多个键,因为它不能同时以两种不同的方式排序。

在本例中,XY是只有一个键列“id”的data.tableY也有一个非键列"x_id“。

代码语言:javascript
复制
   X <- data.table(id = 1:5, a=4:8,key="id")
   Y <- data.table(id = c(1,1, 3,5,7), x_id=c(1,4:1), key="id")

以下语法将在表的键上联接表:

代码语言:javascript
复制
  X[Y]

如何将以下SQL语法转换为data.table代码?

代码语言:javascript
复制
  select * from X join Y on X.id = Y.x_id; 

我得到的最接近的是:

代码语言:javascript
复制
Y[X,list(id, x_id),by = x_id,nomatch=0]

但是,这不会执行与SQL语句相同的inner。

下面是一个更清晰的示例,其中的外键是y_id,我们希望连接查找Y2 where X2$y_id = Y2$id的值。

代码语言:javascript
复制
    X2 <- data.table(id = 1:5, y_id = c(1,1,2,2,2), key="id")
    Y2 <- data.table(id = 1:5, b = letters[1:5], key="id")

我想制作一张表格:

代码语言:javascript
复制
   id  y_id  b
    1     1 "a"
    2     1 "a"
    3     2 "b"
    4     2 "b"
    5     2 "b"

类似于下面的杂乱无章的代码:

代码语言:javascript
复制
> merge(data.frame(X2), data.frame(Y2), by.x = "y_id", by.y = "id")
  y_id id b
1    1  1 a
2    1  2 a
3    2  3 b
4    2  4 b
5    2  5 b

然而,当我这样做的时候:

代码语言:javascript
复制
    X2[Y2, 1:2,by = y_id]

我没有得到想要的结果:

代码语言:javascript
复制
    y_id V1
[1,]    1  1
[2,]    1  2
[3,]    2  1
[4,]    2  2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9914734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档