2017-09-04 74 views
-2

我有一个交易数据集,从2013年1月1日至2016年11月1日有10个客户。我手动为每个客户分割数据集,如下所示,但是我找不到如何创建一个循环来完成它。什么是最好的循环?卡在R中创建循环

This is how my data set looks like for one customer

customer_1 <- transactions[1:47,] 
customer_2 <- transactions[48:94,] 
customer_3 <- transactions[95:141,] 
customer_4 <- transactions[142:188,] 
customer_5 <- transactions[189:235,] 
customer_6 <- transactions[236:282,] 
customer_7 <- transactions[283:329,] 
customer_8 <- transactions[330:376,] 
customer_9 <- transactions[377:423,] 
customer_10 <- transactions[424:468,] 
+1

许多用于按组操作数据帧的选项。 'dplyr'包中的'group_by()'函数是一个很好的开始。使用base R,可以使用'split()'函数或'tapply()'。或者data.table包有一个'by'参数。看到这个问题的想法https://stackoverflow.com/q/11562656/134830 –

+1

虽然它可以使用索引向量迭代地分割数据和'assign'动态创建变量,我认为这是一个更好的想法将其分解成data.frames列表(https://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames/24376207#24376207)或(作为@RichieCotton建议)保持一个框架和工作组。 – r2evans

+0

out < - split(transactions,f = transactions $ customer_id)会给你一个元素列表,每个元素将包含来自一个客户的所有交易 –

回答

0

您应该使用拆分拆分数据帧:

out <- split(transactions, f = transactions$customer_id) 

然后,如果你想分配按客户的变量,你可以做

counter = 1 
for (elt in out){ 
    assign(paste("customer", counter, sep ="_"), elt) 
    counter <- counter + 1 
} 

哪将创建变量customer_1,customer_2 ....

+2

这在技术上确实会做什么要求,但我建议不要这样做:与像这样的数据,一般情况下,无论您对一个data.frame做什么,您都会对其他人做的。当分解成不同的变量时,你必须手动编码每一个变量,或者使用'ls()'和'get()'动态地进行编码。它更直接(编码,跟随,调试)来处理data.frames列表。 – r2evans

+0

谢谢你们。 @ Emmanuel-Lin,我使用了你分享的代码,它的工作原理,但客户不合适。 Customer_1从第377行开始。我如何才能从第1行开始customer_1? –