R数据表-连接方程式上的两个表
是否有一种方法可以使用带有data.table库的等式连接两个表 在SQL中,这类似于:R数据表-连接方程式上的两个表,r,data.table,R,Data.table,是否有一种方法可以使用带有data.table库的等式连接两个表 在SQL中,这类似于: r = data.table(ymd=c(20151101, 20151102, 20151103), val=c(1,2,3)) require(sqldf) sqldf('select t1.*, t2.val as val_prev_day from r t1 join r t2 on t1.ymd=(t2.ymd+1) ') ymd val val_pre
r = data.table(ymd=c(20151101, 20151102, 20151103), val=c(1,2,3))
require(sqldf)
sqldf('select t1.*, t2.val as val_prev_day
from r t1
join r t2
on t1.ymd=(t2.ymd+1)
')
ymd val val_prev_day
1 20151102 2 1
2 20151103 3 2
我们从“r”中删除第一行(
tail(r,-1)
),并在将1添加到“ymd”后删除最后一行的“r”上加入
tail(r,-1)[head(r,-1)[, ymd:=ymd+1],val_prev_day:= i.val ,on = 'ymd'][]
# ymd val val_prev_day
#1: 20151102 2 1
#2: 20151103 3 2
以上内容与OP代码中的SQL语法类似
或者我们可以使用dplyr
library(dplyr)
setDF(r) %>%
mutate(val_prev_day= lag(val)) %>%
na.omit()
# ymd val val_prev_day
#2 20151102 2 1
#3 20151103 3 2
我们从“r”中删除第一行(tail(r,-1)
),并在将1添加到“ymd”后删除最后一行的“r”上加入
tail(r,-1)[head(r,-1)[, ymd:=ymd+1],val_prev_day:= i.val ,on = 'ymd'][]
# ymd val val_prev_day
#1: 20151102 2 1
#2: 20151103 3 2
以上内容与OP代码中的SQL语法类似
或者我们可以使用dplyr
library(dplyr)
setDF(r) %>%
mutate(val_prev_day= lag(val)) %>%
na.omit()
# ymd val val_prev_day
#2 20151102 2 1
#3 20151103 3 2
实际上,您正在创建一个滞后变量。要实现这一点,无需执行联接。在data.table中,您可以使用shift
-函数创建滞后变量,如下所示:
r[, val_prev_day := shift(val)]
这将给你:
> r
ymd val val_prev_day
1: 20151101 1 NA
2: 20151102 2 1
3: 20151103 3 2
通过添加[!is.NA(val_prev_day)]
如下所示,可以删除val_prev_day
具有NA
-值的行:
r[, val_prev_day := shift(val)][!is.na(val_prev_day)]
其中:
ymd val val_prev_day
1: 20151102 2 1
2: 20151103 3 2
实际上,您正在创建一个滞后变量。要实现这一点,无需执行联接。在data.table中,您可以使用shift
-函数创建滞后变量,如下所示:
r[, val_prev_day := shift(val)]
这将给你:
> r
ymd val val_prev_day
1: 20151101 1 NA
2: 20151102 2 1
3: 20151103 3 2
通过添加[!is.NA(val_prev_day)]
如下所示,可以删除val_prev_day
具有NA
-值的行:
r[, val_prev_day := shift(val)][!is.na(val_prev_day)]
其中:
ymd val val_prev_day
1: 20151102 2 1
2: 20151103 3 2