【问题标题】:Iterate over two datasets and return results to one dataset遍历两个数据集并将结果返回到一个数据集
【发布时间】:2016-04-15 15:20:50
【问题描述】:

我有两个数据集,Transaction_long 和 Transaction_short。 Transaction_long 在数据集中有许多带有购买点(用 true 表示)的政策和价格报价。 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

需要在 Transaction Short Dataset 中添加 Policy Change Frequency 列,所以我最终的 Transcation short Dataset 会是这样的

最终数据集应如下所示

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

【问题讨论】:

    标签: r loops


    【解决方案1】:

    使用 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
        } 
    

    由于我在长数据集中有大约 50 万行,在短数据集中有大约 10 万行。这需要一段时间。有没有其他不需要循环的解决方案?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多