小编T.F*_*ung的帖子

动态移位 n(领先/滞后的位置数)

我有以下 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)

r data.table

7
推荐指数
2
解决办法
608
查看次数

SQL优先于忠诚度积分

开发商和分析师.我有一些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个月收入中花费的点数.再次,谢谢你的帮助.

sql sql-server fifo

5
推荐指数
1
解决办法
663
查看次数

在没有明确提及的情况下检索列

大家早上好

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)

r left-join data.table

5
推荐指数
0
解决办法
119
查看次数

使用 data.table 连接进行排列

以下是客户 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 …

r combinatorics data.table

3
推荐指数
1
解决办法
93
查看次数

标签 统计

data.table ×3

r ×3

combinatorics ×1

fifo ×1

left-join ×1

sql ×1

sql-server ×1