我有以下 df:
df <- data.table(user = c('a', 'a', 'a', 'b', 'b')
, spend = 1:5
, shift_by = c(1,1,2,1,1)
); df
user spend shift_by
1: a 1 1
2: a 2 1
3: a 3 2
4: b 4 1
5: b 5 1
Run Code Online (Sandbox Code Playgroud)
我希望仅在此时创建一个超前滞后列,函数n中的参数是动态的并作为输入。我的预期结果是:data.tableshiftdf$shiftby
df[, spend_shifted := c(NA, 1, 1, NA, 4)]; df
user spend shift_by spend_shifted
1: a 1 1 NA
2: a 2 1 1
3: a 3 2 1
4: b …Run Code Online (Sandbox Code Playgroud) 开发商和分析师.我有一些SQL经验,并使用类似的帖子.然而,这是一个更小的利基.提前谢谢你的帮助.
我有以下数据集(编辑.道歉)
建立
CREATE TABLE CustomerPoints
(
CustomerID INT,
[Date] Date,
Points INT
)
INSERT INTO CustomerPoints
VALUES
(1, '20150101', 500),
(1, '20150201', -400),
(1, '20151101', 300),
(1, '20151201', -400)
Run Code Online (Sandbox Code Playgroud)
任何积分的积分都是积分,而积极积分则是兑换积分.由于FIFO(第一个概念中的第一个),在第二批花费的点数(-400)中,其中100个是从20150101(英国格式)获得的积分和20151101中的300积分中获得的.
目标是为每个客户计算在x和y个月收入中花费的点数.再次,谢谢你的帮助.
大家早上好
在data.table我发现使用左连接时,当隐式提及列名时,即不提及表(列所在的表)会导致意外的结果,尽管列名是唯一的。
虚拟数据
x <- data.table(a = 1:2); x
# a
# 1: 1
# 2: 2
y <- data.table(c = 1
,d = 2); y
# c d
# 1: 1 2
Run Code Online (Sandbox Code Playgroud)
左连接在检索列 c 时不提及表名
z <- y[x, on=.(c=a), .(a,c,d)]; z
# a c d
# 1: 1 1 2
# 2: 2 2 NA
Run Code Online (Sandbox Code Playgroud)
查看上述结果时出现问题。c 列的第 2 行应该是NA. 但是,它显示2
这仅在用户明确提及该表时才得到纠正:
z <- y[x, on=.(c=a), .(a,x.c,d)]; z
# a x.c d
# 1: 1 …Run Code Online (Sandbox Code Playgroud) 以下是客户 1 购买的产品表。
df <- data.table(customer_id = rep(1,3)
, product_1 = letters[1:3]
)
customer_id product_1
1: 1 a
2: 1 b
3: 1 c
Run Code Online (Sandbox Code Playgroud)
假设真实数据集有多个客户,我想为每个客户创建每个客户购买的产品的排列(无替换)。在组合术语中:
nPk
Run Code Online (Sandbox Code Playgroud)
在哪里
n = 每个客户购买的(不同的)产品数量
k = 2
结果:
customer_id product_1 product_2
1: 1 a b
2: 1 a c
3: 1 b c
4: 1 b a
5: 1 c a
6: 1 c b
Run Code Online (Sandbox Code Playgroud)
SQL 连接条件为:
where customer_id = customer_id
and product_1 != product_1
Run Code Online (Sandbox Code Playgroud)
但是,我知道data.table目前对 non equi joins …