我需要多个日期之间的子集 示例数据框:
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])
问题是当有多个日期范围时。
感谢。
答案 0 :(得分:1)
一个选项是lapply
行dates_cut
,然后将每个子集存储在列表中。之后,您可以rbind
与do.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();
}
}