如何计算R中不同用户的不同购买日期之间的差异

时间:2015-05-27 18:34:48

标签: r

我有一个包含user.id和购买日期的数据集。我需要计算R中每个用户的连续购买之间的持续时间。

以下是我的示例数据:

row.names   USER.ID ISO_DATE
1   1067    3   2014-05-05
2   1079    3   2014-05-06
3   1571    3   2014-05-20
4   1625    3   2014-05-21
5   1759    3   2014-05-24
6   2387    3   2014-06-09
7   2683    3   2014-06-14
8   2902    3   2014-06-18
9   3301    3   2014-06-26
10  4169    3   2014-07-11
11  5361    3   2014-07-21
12  5419    3   2014-07-22
13  5921    3   2014-07-25
14  6314    3   2014-07-27
15  7361    3   2014-08-03
16  8146    3   2014-08-07
17  10091   3   2014-08-12
18  10961   3   2014-08-13
19  13296   3   2014-08-16
20  13688   3   2014-08-17
21  15672   3   2014-08-20
22  18586   3   2014-08-22
23  24304   3   2014-08-31
24  38123   3   2014-10-22
25  50124   3   2014-11-19
26  50489   3   2014-11-20
27  52201   3   2014-11-23
28  52900   3   2014-11-25
29  61564   3   2014-12-06
30  64351   3   2014-12-09
31  65465   3   2014-12-10
32  67880   3   2014-12-12
33  69363   3   2014-12-14
34  69982   3   2014-12-14
35  70040   3   2014-12-14
36  70351   3   2014-12-15
37  72393   3   2014-12-16
38  73220   3   2014-12-17
39  75110   3   2014-12-18
40  78827   3   2014-12-20
41  112447  3   2015-01-08
42  113903  3   2015-01-09
43  114723  3   2015-01-11
44  114760  3   2015-01-12
45  115464  3   2015-01-14
46  116095  3   2015-01-15
47  118406  3   2015-01-18
48  118842  3   2015-01-18
49  119527  3   2015-01-19
50  120774  3   2015-01-21
51  120853  3   2015-01-22
52  121284  3   2015-01-22
53  121976  3   2015-01-23
54  126256  3   2015-01-26
55  126498  3   2015-01-27
56  127776  3   2015-01-28
57  128537  3   2015-01-29
58  128817  3   2015-01-30
59  129374  3   2015-01-30
60  131604  3   2015-02-01
61  132150  3   2015-02-02
62  132557  3   2015-02-03
63  132953  3   2015-02-04
64  135514  3   2015-02-08
65  136058  3   2015-02-09
66  136965  3   2015-02-10
67  140787  3   2015-02-13
68  143113  3   2015-02-15
69  143793  3   2015-02-16
70  146344  3   2015-02-19
71  147669  3   2015-02-20
72  148397  3   2015-02-21
73  151196  3   2015-02-23
74  156014  3   2015-02-26
75  161235  3   2015-02-28
76  162521  3   2015-03-01
77  177878  3   2015-03-11
78  190178  3   2015-03-18
79  199679  3   2015-03-22
80  212460  3   2015-03-28
81  221153  3   2015-04-03
82  228935  3   2015-04-07
83  230358  3   2015-04-08
84  230696  3   2015-04-08
85  250294  3   2015-04-15
86  267469  3   2015-04-19
87  270947  3   2015-04-21
88  274882  3   2015-04-22
89  282252  3   2015-04-24
90  299949  3   2015-04-28
91  323336  3   2015-05-03
92  324847  3   2015-05-03
93  326284  3   2015-05-04
94  337381  3   2015-05-06
95  346498  3   2015-05-08
96  372764  3   2015-05-15
97  376366  3   2015-05-16
98  379325  3   2015-05-16
99  386458  3   2015-05-19
100 392200  3   2015-05-21
101 393039  3   2015-05-21
102 399126  3   2015-05-22
103 106789  7   2015-01-03
104 124929  7   2015-01-25
105 148711  7   2015-02-21
106 161337  7   2015-02-28
107 163738  7   2015-03-02
108 164070  7   2015-03-02
109 170121  7   2015-03-07
110 184856  7   2015-03-14
111 314891  7   2015-05-01
112 182 9   2014-03-12
113 290 9   2014-03-19
114 549 9   2014-04-10
115 553 9   2014-04-10
116 559 9   2014-04-10
117 564 9   2014-04-11
118 1973    9   2014-05-30
119 1985    9   2014-05-30
120 2243    9   2014-06-06
121 2298    9   2014-06-07
122 2713    9   2014-06-14
123 35352   9   2014-10-17
124 35436   9   2014-10-17
125 35509   9   2014-10-17
126 35641   9   2014-10-17
127 35642   9   2014-10-17
128 35679   9   2014-10-17
129 35750   9   2014-10-17
130 36849   9   2014-10-19
131 37247   9   2014-10-20
132 37268   9   2014-10-20
133 79630   9   2014-12-20
134 3900    13  2014-07-08
135 3907    13  2014-07-08
136 4125    13  2014-07-11
137 4142    13  2014-07-11
138 5049    13  2014-07-18
139 5157    13  2014-07-19
140 5648    13  2014-07-23
141 5659    13  2014-07-23
142 6336    13  2014-07-27
143 6621    13  2014-07-29
144 6971    13  2014-07-31
145 7221    13  2014-08-02
146 7310    13  2014-08-03
147 8036    13  2014-08-06
148 11437   13  2014-08-14
149 11500   13  2014-08-14
150 14627   13  2014-08-18
151 15260   13  2014-08-19
152 22417   13  2014-08-26
153 23837   13  2014-08-30
154 24668   13  2014-09-02
155 26481   13  2014-09-10
156 26788   13  2014-09-12
157 27116   13  2014-09-13
158 27959   13  2014-09-18
159 28304   13  2014-09-20
160 28552   13  2014-09-21
161 29069   13  2014-09-24
162 30041   13  2014-09-28
163 30349   13  2014-09-30
164 31352   13  2014-10-04
165 32189   13  2014-10-09
166 34163   13  2014-10-15
167 36946   13  2014-10-20
168 36977   13  2014-10-20
169 37042   13  2014-10-20
170 37266   13  2014-10-20
171 40117   13  2014-10-25
172 40765   13  2014-10-26
173 43418   13  2014-10-29
174 47691   13  2014-11-10
175 54971   13  2014-11-28
176 55275   13  2014-11-28
177 55297   13  2014-11-28
178 55458   13  2014-11-28
179 55908   13  2014-11-29
180 59925   13  2014-12-03
181 60722   13  2014-12-05
182 61178   13  2014-12-05
183 65547   13  2014-12-10
184 107202  13  2015-01-03
185 173010  13  2015-03-08
186 199791  13  2015-03-22
187 227003  13  2015-04-06
188 252548  13  2015-04-16
189 271845  13  2015-04-21
190 274804  13  2015-04-22
191 294579  13  2015-04-26
192 332205  13  2015-05-05
193 339695  13  2015-05-07
194 373554  13  2015-05-15
195 390934  13  2015-05-21
196 203 16  2014-03-13
197 228 16  2014-03-15
198 616 16  2014-04-12
199 664 16  2014-04-14
200 851 16  2014-04-23
201 1826    16  2014-05-26
202 1969    16  2014-05-30
203 2026    16  2014-05-31
204 2419    16  2014-06-10
205 3295    16  2014-06-26
206 14030   16  2014-08-18
207 16368   16  2014-08-21
208 21239   16  2014-08-24
209 23651   16  2014-08-29
210 24533   16  2014-09-01
211 25868   16  2014-09-07
212 27408   16  2014-09-15
213 27721   16  2014-09-17
214 29076   16  2014-09-24
215 30122   16  2014-09-29
216 31622   16  2014-10-06
217 31981   16  2014-10-07

我想添加一个列,以便为每个用户的连续购买带来差异。我正在使用ddply函数,但它显示出一些错误。

以下是我的尝试:

users_frequency <- ddply(users_ordered, "USER.ID", summarize, 
                   orderfrequency = as.numeric(diff(ISO_DATE)))

1 个答案:

答案 0 :(得分:2)

如果您对dplyr而不是plyr

感到满意
df %>%
  mutate(ISO_DATE =  as.Date(df$ISO_DATE, "%Y-%m-%d")) %>%
  group_by(USER.ID) %>%
  arrange(ISO_DATE) %>%
  mutate(lag = lag(ISO_DATE), difference = ISO_DATE - lag)