相关疑难解决方法(0)

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

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

在这个例子中,XYdata.tables的一个单一的键列"ID"; Y还有一个非键列"x_id".

   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")
Run Code Online (Sandbox Code Playgroud)

以下语法将在其键上连接表:

  X[Y]
Run Code Online (Sandbox Code Playgroud)

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

  select * from X join Y on X.id = Y.x_id; 
Run Code Online (Sandbox Code Playgroud)

我得到的最接近的是:

Y[X,list(id, x_id),by = x_id,nomatch=0]
Run Code Online (Sandbox Code Playgroud)

但是,这不会与SQL语句执行相同的内部联接.


这是一个更清晰的例子,其中外键是y_id,我们希望连接查找Y2的值X2$y_id = Y2$id.

    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")
Run Code Online (Sandbox Code Playgroud)

我想制作表格:

   id  y_id  b
    1     1 "a"
    2     1 "a"
    3     2 …
Run Code Online (Sandbox Code Playgroud)

sql r data.table

19
推荐指数
1
解决办法
5827
查看次数

标签 统计

data.table ×1

r ×1

sql ×1