【发布时间】:2020-11-24 09:58:39
【问题描述】:
我有一个 Customer_ID 表,显示按年付款。第一个(许多)客户如下所示:
ID Payment Year
112 0 2004
112 0 2005
112 0 2006
112 9592 2007
112 12332 2008
112 9234 2011
112 5400 2012
112 7392 2014
112 8321 2015
请注意,缺少一些年份。我需要为每一行创建 10 个新列,显示过去 10 年的付款。结果表应如下所示:
ID Payment Year T-1 T-2 T-3 T-4 T-5 T-6 T-7 T-8 T-9 T-10
112 0 2004 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
112 0 2005 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL
112 0 2006 0 0 NULL NULL NULL NULL NULL NULL NULL NULL
112 952 2007 0 0 0 NULL NULL NULL NULL NULL NULL NULL
112 1232 2008 952 0 0 0 NULL NULL NULL NULL NULL NULL
112 924 2011 NULL NULL 1232 952 0 0 0 NULL NULL NULL
112 500 2012 924 NULL NULL 1232 952 0 0 0 NULL NULL
112 392 2014 NULL 500 924 NULL NULL 1232 952 0 0 0
112 821 2015 392 NULL 500 924 NULL NULL 1232 952 0 0
(我知道这是重复数据 - 它正在为预测模型做准备,在该模型中,以前的付款(和其他信息)将用于预测当年的付款)
在 SQL 中,我会将表留给自己,加入 ID 和 Year=(Year-1) 等...但我不知道如何在 R 中执行此操作。
我还考虑过使用 dplyr 按 ID 分组,然后在取消分组之前使用 lag 改变新列。但是我的桌子很大,我认为这太慢了。理想情况下,我想改用 data.table,但不知道如何使用。
非常感谢任何帮助。
【问题讨论】:
-
您能否用 dput(df) 产生的结构()命令替换给定的数据帧!
-
Henrik - 我喜欢第二个链接中的答案,使用 shift,但它不按 ID 分组 - 即使它们是不同的 ID,它也总是从上面的行中获取。我不确定第一个链接是如何关联的?
标签: r data.table data-manipulation