如何找到具有相同模式的客户?

时间:2018-05-19 20:06:32

标签: r sqldf

我有一个包含IDDATESRATES列的表格,一个ID(客户)有多个rates,但只有一个rate {关于一个特定date的{​​1}}。

ID     DATES          RATES
 5     2014-07-01     0.02
 5     2014-07-02     0.03
 5     2014-07-03     0.04

因此,一个ID一段时间内只能有一个费率更改路径,因为一个ID在特定rate上只分配了一个date。但是有些ID具有完全相同的速率变化路径,因为可以将同一rate分配给多个ID。例如,ID 5& 6随着时间的推移具有相同的速率变化路径。

ID    DATES          RATES
 5    2014-07-01     0.02
 5    2014-07-02     0.03
 5    2014-07-03     0.04
 6    2014-07-01     0.02
 6    2014-07-02     0.03
 6    2014-07-03     0.04

我的目标是找出具有相同费率变化路径的客户(理想输出为,费率路径1包括ID 5& 6. ID列包括{{1具有相同的速率变化路径)。

ID

我希望在Rstudio上使用R或sqldf包来解决这个问题。样品表如下所示。有一点需要指出,ID 1和3共享相同的模式,即使ID 3比ID 1晚一天,但如果你做一个关于它们的速率的折线图,这两行将完全重叠。然而,ID 1和ID 2并不共享相同的模式,因为即使前三天他们共享相同的模式,但最后一天他们的费率是不同的。这两条线不会重叠。

Rate Path                  ID
  1                        5,6
  2                        1,3

我目前正在使用绝对差异的成对和来解决这个问题。但是大数据需要经过大量的计算。我在考虑解决这个问题的其他更好方法吗?

1 个答案:

答案 0 :(得分:0)

你似乎在寻找一件事是另一件事的确切子集。一种自然的方法是使用数组。但是,我不知道一个简单的"包含"匹配订单和元素。所以,我会使用字符串:

with t as (
      select id,
             (',' || string_agg(rate, ',' order by date) || ',') as rates
      from yourtable t
      group by id
     )
select t1.*, t2.*
from t join
     t t2
     on t.rates like '%' || t2.rates || '%';