"E;%以“%”为单位;r中的命令与规则子集

"E;%以“%”为单位;r中的命令与规则子集,r,R,我有一个简单的问题。为什么r会返回不同的结果 dim(data2[data2$as_of_date=="2014-12-31",]) dim(data2[data2$as_of_date%in%c("2014-12-31"),]) ? 输出: > dim(data2[data2$as_of_date=="2014-12-31",]) [1] 48684 92 > dim(data2[data2$as_of_date%in%c("2014-12-31"),]) [1] 0 9

我有一个简单的问题。为什么r会返回不同的结果

dim(data2[data2$as_of_date=="2014-12-31",])
dim(data2[data2$as_of_date%in%c("2014-12-31"),])
?

输出:

> dim(data2[data2$as_of_date=="2014-12-31",])
[1] 48684    92
> dim(data2[data2$as_of_date%in%c("2014-12-31"),])
[1]  0 92

%中的
%无法识别日期的“字符”形式。考虑:

> as.Date("2014-12-31") == "2014-12-31"
[1] TRUE
> as.Date("2014-12-31") %in% "2014-12-31"
[1] FALSE
您需要使用:

data2[as.character(data2$as_of_date) %in% c("2014-12-31"),]

虽然在本例中,
==
显然可以正常工作,因为您只匹配了一个值。

可能是重复的:但不确定是否投票关闭。可能,请参阅
今天=Sys.Date();Sys.Date()==as.character(今天);Sys.Date()%in%as.character(今天)
谢谢你们。事实上我才意识到答案。这是一个不同于链接帖子的问题。更接近alexis_laz的建议。它与这样一个事实有关,即如果将字符串与日期进行比较,“==”会自动将字符串类型转换为日期。但是“%in%”不会这样做——因此,由于data2$as_of_date是一个日期,“2014-12-31”是一个字符串,因此它不会返回匹配项,不像“==”@tylerlinker:不是重复项。你链接到的那一个挂起在向量循环上,这在这里不是一个问题。只需添加我发现的东西:
match
使用它将“factor”和“POSIXlt”转换为“character”。例如,
Sys.Date()%在%as.character(今天)
VS
as.POSIXlt(Sys.Date())%在%as.character(今天)
非常感谢您的回答。有趣的是,将这两个论点都作为日期提交给比较国并不奏效。i、 e.
data2[截止日期(data2$as\u of\u Date)%in%as.Date(c)(“2014-12-31”),]
仍然没有返回匹配项。但把他们塑造成角色是可行的perfectly@Paul,奇数,
截止日期(“2014-12-31”)%in%的截止日期(“2014-12-31”)
返回TRUE。