【问题标题】:How to load data from database in R by different month如何按不同月份从R中的数据库加载数据
【发布时间】:2015-10-09 17:30:36
【问题描述】:

我正在使用 RODBC 包从 R 中的数据库加载数据并根据月度数据进行分析。

由于数据非常庞大,我不能将所有数据一起加载,所以我的想法是逐月加载数据并使用循环进行分析,以下是逻辑:

table <- sqlQuery(channel, 
               " select * from db where date between 'yyyy-mm-dd' and 'yyyy-mm-dd' ##this period is 1 month##
               "
                 , believeNRows=FALSE) 

####run function on table#####
####then load next month data and run function again#####

我的问题是如何使用循环加载下个月数据并替换上个月表,以及当月数达到12时如何更改年数。

感谢您的帮助,祝您一切顺利。

【问题讨论】:

    标签: r for-loop rodbc


    【解决方案1】:

    这可能是一种方法:

    dates <- seq(as.Date("2010-01-01"), by = "month", length.out = 13)
    for (i in 1:(length(dates) -1)) {
      sqlQuery(channel, sprintf("select * from db where date between %s and %s;\n", dates[i],dates[i+1]), believeNRows=FALSE)
    }
    

    注意几点: 首先,必须根据您的需要编辑日期顺序,其次;查询一直到日期的倒数第二个元素(否则你会得到一个NA(所以在未来一个月)和第三个;如果你想这样做,这不会打印你发送的查询,更改(或添加)以下命令:

    cat(sprintf("select * from db where date between %s and %s;\n", dates[i],dates[i+1]))
    

    在这种情况下,此输出(将sqlQuery 切换为cat 会产生以下结果(注意简化循环仅适用于SQL 语句,而不是完整的sqlQuery 调用):

    dates <- seq(as.Date("2010-01-01"), by = "month", length.out = 13)
    for (i in 1:(length(dates) -1)) {
      cat(sprintf("select * from db where date between %s and %s;\n", dates[i],dates[i+1]))
    }
    #select * from db where date between 2010-01-01 and 2010-02-01;
    #select * from db where date between 2010-02-01 and 2010-03-01;
    #select * from db where date between 2010-03-01 and 2010-04-01;
    #select * from db where date between 2010-04-01 and 2010-05-01;
    #select * from db where date between 2010-05-01 and 2010-06-01;
    #select * from db where date between 2010-06-01 and 2010-07-01;
    #select * from db where date between 2010-07-01 and 2010-08-01;
    #select * from db where date between 2010-08-01 and 2010-09-01;
    #select * from db where date between 2010-09-01 and 2010-10-01;
    #select * from db where date between 2010-10-01 and 2010-11-01;
    #select * from db where date between 2010-11-01 and 2010-12-01;
    #select * from db where date between 2010-12-01 and 2011-01-01;
    

    【讨论】:

    • 非常感谢!我认为它会起作用..但我不明白猫是用来做什么的,请告诉我,谢谢
    • cat 是 concatenate 和 print 的缩写(请参阅 ?cat),我添加它只是为了以防您想查看您发送的用于调试目的的查询(或类似的东西)。这不是绝对必要的,这里重要的是循环和sprintf。如果没有cat,您将无法看到您发送的查询(这可能是可取的)
    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 2017-01-01
    • 2011-09-03
    • 2016-12-19
    • 2022-01-25
    • 2013-12-07
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多