【发布时间】:2021-06-08 08:24:25
【问题描述】:
我有一个名为dataBase 的数据框,其中包含许多行和列。其中一列包含日期(称为日期),而其余列包含数值。下面给出一个简化的表示:
dataBase$date
"30/06/2020" "27/08/2020" "30/06/2020" "28/08/2020" "30/06/2020"
"28/08/2020" "30/06/2020" "01/08/2020" "30/06/2020" "01/08/2020"
"01/08/2020" "30/06/2020" "30/06/2020" "01/08/2020" "30/06/2020"
下面的类
class(dataBase$date)#"character"
我想要做的是保留日期在一个范围内的数据框的行,比如说“01/01/2020”-“31/12/2020”。 (提示:这些日期可能不会明确出现在日期列中,仅作为边界日期)
我尝试了不同的方法。一个是使用以下命令:
DATE1 <- as.Date("01/01/2020")
DATE2 <- as.Date("31/12/2020")
TEST <- dataBase[dataBase$date >= DATE1 & dataBase$date <= DATE2,]
或
TEST <- subset(dataBase, date > as.Date("01/01/2020") & date < as.Date("31/12/2020"))
数据框不受上述命令的影响。
最终,我不得不根据日期列的日期对数据框进行排序,并使用“匹配”来获得相应的位置:
test4 <- dataBase[order(as.Date(dataBase$date, format="%d/%m/%Y")),]
forwrd <- sort(as.Date(test4$date, format="%d/%m/%Y"),decreasing = FALSE)
forwrd <- format(as.Date(forwrd),'%d/%m/%Y')
rev <- sort(as.Date(test4$date, format="%d/%m/%Y"),decreasing = TRUE)
rev <- format(as.Date(rev),'%d/%m/%Y')
start_period = "07/01/2020";end_period = "28/08/2020"
ind_start<-match(start_period, forwrd)
ind_end<-length(rev)-match(end_period,rev)+1
test4_sub <- test4[ind_start:ind_end,];
这给了我行的范围(ind_start - ind_end) 我想问是否有更简单的方法来做到这一点。以及为什么使用前两种方法对我不起作用。
【问题讨论】:
-
请阅读this 并考虑接受您迄今为止提出的问题的答案。