我正在尝试为我正在工作的公司自动化一些分析,我需要检查每行中的数据是否是在4月份创建的。作为一个非常完整的R初学者,对我来说这不是一件容易的事。日期是一个字符串,如下所示:
01-Apr-2017 12:34:56
要创建一个仅包含2017年4月观察数据的数据框,我正在尝试使用子集。我的代码如下:
df2=subset(df,identical(substr(Closed,4,11),"Apr-2017"))
当我运行它时,它给了我一个包含0行的新数据框,这表明它从未在因子Closed中找到一个例子,其中字符4-11等于Apr 2017
。但是,当我手动使用具有此日期的行时,它将返回TRUE
,正如子集函数中所需的那样:
dats.gmdm$Closed[131] #This returns "14-Apr-2017 14:39:28"
substr(dats.gmdm$Closed[131],4,11) #This returns "Apr-2017"
identical(substr(dats.gmdm$Closed[131],4,11),"Apr-2017") #And this returns TRUE
理论上,我应该只有一个只有这些实例的集合,但它只给了我一个包含22个因子的空数据框(与原始数据集中的相同)。
还有另一种方法可以做到这一点,或者我的代码是如何错误的?如果没有,为什么理论上不可能?
答案 0 :(得分:0)
您可以使用"Apr-2017"
轻松拉出与字符串grepl()
(或其他日期)匹配的数据框行,然后将这些行用作行索引从主df中提取。假设数据位于dats.gmdm
且Closed
是带日期的变量,那么这样的东西应该有效:
date_code <- "Apr-2017"
idx <- grepl(date_code, dats.gmdm[,"Closed"])
df2 <- dats.gmdm[idx,]