使用多个日期条件为两者之间的范围子集数据框

时间:2017-05-01 21:34:43

标签: r date

我需要多个日期之间的子集 示例数据框:

testdf <- data.frame(short_date = seq(as.Date("2007-03-01"), 
                                  as.Date("2008-09-01"), by = 'day'))

包含日期范围值的数据框示例:

dates_cut <- structure(list(emergence = structure(c(13627, 13997), class = "Date"), disease_onset = structure(c(13694, 14062), class = "Date")), .Names = c("emergence", "disease_onset"), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"))

显然,这仅仅是一个样本,我需要多年才需要数据子集($emergence date$disese_onset)。 这适用于一个数据范围:

testdf %>% filter(short_date >=dates_cut[1,1], short_date >=dates_cut[1,2])

问题是当有多个日期范围时。

感谢。

1 个答案:

答案 0 :(得分:1)

一个选项是lapplydates_cut,然后将每个子集存储在列表中。之后,您可以rbinddo.call一起使用list <- lapply(1:nrow(dates_cut), function(i) { testdf[which(testdf$short_date >= dates_cut[i, "emergence"] & testdf$short_date <= dates_cut[i, "disease_onset"]), , drop = FALSE]}) res <- do.call(rbind, list) head(res) # short_date #55 2007-04-24 #56 2007-04-25 #57 2007-04-26 #58 2007-04-27 #59 2007-04-28 #60 2007-04-29

    public void foobar() {
        int[][] data = new int[][] {
                { 1, 2, 3, 4, 5 },
                { 1, 2, 3, 4, 5 },
                { 1, 2, 3, 4, 5 },
                { 1, 2, 3, 4, 5 },
                { 1, 2, 3, 4, 5 }
        };

        loop(data);

        System.out.println("=>");

        loopReverse(data);
    }

    public void loop(int[][] data) {
        for(int i=0; i<data.length; i++) {
            System.out.print(i+"\t");
            for(int j=0; j<data[i].length; j++) {
                System.out.print("["+data[i][j] + "] ");
            }
            System.out.println();
        }
    }

    public void loopReverse(int[][] data) {
        for(int i=data.length-1; i >= 0; i--) {
            System.out.print(i+"\t");
            for(int j=data[i].length-1; j >= 0; j--) {
                System.out.print("["+data[i][j] + "] ");
            }
            System.out.println();
        }
    }