迭代两个数据集并将结果返回到一个数据集

时间:2016-04-15 15:20:50

标签: r loops

我有两个数据集,Transaction_long和Transaction_short。 Transaction_long在数据集中有许多政策和价格报价以及购买点(用真表示)。 Transaction_short只有购买点的条目。

我的目标是在Transaction_short数据集中添加一个名为Policy_Change_Frequency的列。对于短数据集中的每个客户,在长数据集中迭代该客户的行并计算策略更改的时间。

要查找政策更改,我可以使用sum(diff(Transaction_Long$policy)!=0)但不确定如何迭代这两个数据集并获得结果

详细说明:

Customer_Name : name of customer
Customer_ID: Customer Identifier number
Purchase: Boolean variable (Yes-1,No-0)
Policy: Categorical (takes values 1-5)
Price : Price quoted

数据集1-Transaction_Long

Customer_Name,Customer_ID,Purchased,Policy,Price
Joe,101,0,1,500
Joe,101,0,1,505
Joe,101,0,2,510
Joe,101,0,2,504
Joe,101,0,2,507
Joe,101,0,1,505
Joe,101,1,3,501
Mary,103,0,1,675
Mary,103,0,3,650
Mary,103,0,2,620
Mary,103,0,2,624
Mary,103,0,2,630
Mary,103,1,2,627

数据集2Transaction_Short

Customer_Name , Customer_ID,Purchased,Policy, Price
Joe,101,1,3,501
Mary,103,1,2,627

需要在事务短数据集中添加策略更改频率列,因此我的最终Transcation短数据集将如下所示

最终数据集应如下所示

Customer_Name , Customer_ID,Purchased, Policy, Price,Policy_ChangeFreq 
Joe,101,1,3,501,3
Mary,103,1,2,627,2

1 个答案:

答案 0 :(得分:0)

使用R

中的sqldf包使其工作
for (i in 1:nrow(Transaction_short)){
    sql <- sprintf("SELECT policy from Transaction_long where customer_ID = %s",ML_Train_short$customer_ID[i])
    df<- sqldf(sql)
    NF <- sum(df$policy[-1]!= df$policy[-length(df$policy)])
    ML_Train_short$Policy_Change_Freq[i] <- NF
    } 

因为我在长数据集中有大约500K行,而在短数据集中大约有100K ..这需要一段时间..还有其他任何不需要循环的解决方案吗?