您的努力表明了对 R 语言如何工作的一些误解。要查看 R“认为” i
“[”函数位置的向量是什么,只需在控制台中输入向量代码:
c(01/02/2007,02/02/2007)
[1] 0.0002491281 0.0004982561
因此,您实际上是在提交一个包含接近零的小数部分的数字向量。您可以使用数字向量进行选择,但它们必须是大于 1 的整数。即使您确实了解 R 不会将它们用作日期并尝试将其格式化为 R“日期”分类值,您仍然仅使用这些日期作为索引不会成功,因为 R Dates 实际上是表示自 1970 年 1 月 1 日以来的天数的整数,并且这些日期将采用非常大的值(13545 和 13546):
dput( as.Date(c("01/02/2007","02/02/2007"), format="%d/%m/%Y") )
# structure(c(13545, 13546), class = "Date")
mydf = data.frame( d=as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y") , letters[1:2] )
mydf
#------------
d letters.1.2.
1 2007-02-01 a
2 2007-02-02 b
mydf[ as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y") , ]
#----------------
d letters.1.2.
NA <NA> <NA>
NA.1 <NA> <NA>
所以你最后的评论/问题的答案:你称之为“日期”的那些表达从来都不是日期;它们只是由斜线分隔的数字,并且它们一起由 R 作为算术表达式进行评估,即作为由除法运算符分隔的数字。即使转换为“日期”类会为您提供一组整数,但 R 解释器不会以您期望的方式处理它们。您需要一种将日期与日期匹配的机制。中%in%
缀运算符实际上是 R 函数的修饰版本match
。该%in%
函数实际上是在构建一个可用于选择匹配行的逻辑向量:
mydf$d %in% as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y")
[1] TRUE TRUE
mydf[ mydf$d %in% as.Date( c("01/02/2007","02/02/2007"), format="%d/%m/%Y") , ]
d lets
1 2007-02-01 a
2 2007-02-02 b