【问题标题】:After I filter my data, the environment shows it same data size过滤数据后,环境显示相同的数据大小
【发布时间】:2018-02-01 13:52:35
【问题描述】:

如图中的问题所示,在我两次过滤数据后,buyer_dormant 和buyer_converted 的obs 仍然与buyer_before_20161222 相同。

在过滤过程中控制台没有显示任何错误。所以我对发生的事情感到非常困惑。

当我尝试测试数据以查看哪里出错时,我在表 buy_converted 中过滤了 order_amount==0 & 20170222<order_date<=20170522。结果应该是no result,但它返回了order_amount=1。

我对自己的状况感到非常困惑,我不知道自己错过了什么。

任何建议将不胜感激!

【问题讨论】:

    标签: sql r database sqldf r-package


    【解决方案1】:

    您确定您的 SQL 查询措辞正确吗?对于第一个 sql 查询,尝试"SELECT customer_id, order_amount, order_date FROM buyer_before_20161222 WHERE (order_amount <=0) AND (order_date BETWEEN 2016122 AND 20170222)" 看看是否有效。

    如果您只希望customer_id 用于描述的休眠和转换的买家组,请尝试使用dplyr 编写的以下代码:

    201612222之前买过东西的顾客:

    buyer_before_2016122 <- order_table %>% 
        filter(order_amount>=1, order_date < 20161222) %>%
        select(customer_id) 
    

    在 20161222 和 20170222 之间没有购买任何东西的客户,过滤出在 20161222 之前购买过东西的客户,也就是休眠买家:

     buyer_dormant  <- order_table %>%
        filter(between(order_date, 20161222, 20170222), order_amount <= 0, 
        customer_id %in% buyer_before_2016122$customer_id ) 
    

    在 20170222 和 20170522 之间购买的客户,过滤掉休眠买家,也就是转换的买家:

    buyer_converted <- order_table %>% 
        filter(between(order_date, 20170222, 20170522), order_amount >= 1, 
        customer_id %in% buyer_dormant$customer_id ) 
    

    希望有帮助!

    【讨论】:

    • 感谢您的回复。我只是试图以你的方式重写,但环境显示buyer_dormant有0个obs。
    • 这不是我们想要的结果吗?我可以看到你已经过滤了buyer_before_20161222 有order_amount &gt;=1,所以再次明确过滤order_amount &lt;=0 不会留下任何观察结果。如果这不是想要的结果,我认为您需要考虑您要过滤的内容,因为代码现在似乎可以正常工作了。
    • 这不是想要的结果。在buyer_before_20161222,order_amount&gt;=1 被限制在时间段order_date&lt;20161222。而order_amount&lt;=0 旨在根据buyer_before_20161222 查找在2016122 &lt;=order_date&lt;= 20170222 期间未购买的客户。所以应该有一些数据,因为我可以在我的 csv 文件中找到一些满足这些条件的客户。
    • 按照您现在编写的方式,dplyr 过滤器 (filter(order_amount &gt;=1, order_date &lt; 20161222)) 不受“约束”——它将仅返回订单金额为正且订单日期早于 20161222 的观察值。换句话说,所有订单日期在 20161222 之后的观察都将被过滤掉。要包含它们,一种可能的方法是将| order_date &gt;= 20161222 添加到您的条件语句中。您编写的 SQL 查询也是如此——由AND 链接的两个条件不会以您描述的方式相互“约束”。
    • 非常感谢。可能是因为我的英语不好,我没有明确表达我的情况。首先:dplyr 过滤器的结果是我想要的 - 我想找到在 20161222 之前购买的客户(在这种情况下为 order_amount&gt;=1)。其次:我想要在 buyer_dormant 中找到在 2016122 &lt;=order_date&lt;= 20170222from 期间停止购买的客户buyer_before_20161222。然后从customer_dormant找到重新开始购买的客户。那么,我认为在这种情况下使用&amp; 可能是正确的?
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多