R - 在子集()中使用字符串解析函数(不仅仅是布尔运算符)的问题

时间:2017-06-01 20:23:08

标签: r

我正在尝试为我正在工作的公司自动化一些分析,我需要检查每行中的数据是否是在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个因子的空数据框(与原始数据集中的相同)。

还有另一种方法可以做到这一点,或者我的代码是如何错误的?如果没有,为什么理论上不可能?

1 个答案:

答案 0 :(得分:0)

您可以使用"Apr-2017"轻松拉出与字符串grepl()(或其他日期)匹配的数据框行,然后将这些行用作行索引从主df中提取。假设数据位于dats.gmdmClosed是带日期的变量,那么这样的东西应该有效:

 date_code <- "Apr-2017"
 idx <- grepl(date_code, dats.gmdm[,"Closed"])
 df2 <- dats.gmdm[idx,]