3

假设我的数据如下所示:

2372  Kansas KS2000111 HUMBOLDT, CITY OF    ATRAZINE    1.3 05/07/2006
9104  Kansas KS2000111 HUMBOLDT, CITY OF    ATRAZINE   0.34 07/23/2006
9212  Kansas KS2000111 HUMBOLDT, CITY OF    ATRAZINE   0.33 02/11/2007
2094  Kansas KS2000111 HUMBOLDT, CITY OF    ATRAZINE    1.4 05/06/2007
16763 Kansas KS2000111 HUMBOLDT, CITY OF    ATRAZINE   0.61 05/11/2009
1076  Kansas KS2000111 HUMBOLDT, CITY OF METOLACHLOR   0.48 05/12/2002
1077  Kansas KS2000111 HUMBOLDT, CITY OF METOLACHLOR    0.3 05/07/2006

我希望能够按分析物进行子集化,并在日期上进行部分匹配(即我只想要年份)。我一直在尝试这个,但我知道这不太正确。

 data[data$Analyte=="ATRAZINE" & grep("2006",as.character(data$Date)),]

有什么建议么?

4

3 回答 3

3

对于这个问题,我会采用 Apprentice Queue 的答案中的方法,即从日期中提取年份,而不是进行通用字符串匹配。我会建议:

data[data$Analyte =="ATRAZINE"
     & as.POSIXlt(data$Date, format="%m/%d/%Y")$year == 106]

但是如果你真的必须做正则表达式匹配,你可以使用greplwhich 返回一个逻辑向量而不是grepwhich 返回一个索引向量。

data[data$Analyte=="ATRAZINE" & grepl("2006",as.character(data$Date)),]
于 2010-06-16T09:29:52.240 回答
2

使用日期文字的一种方法:

data[data$Analyte =="ATRAZINE"
     & (data$Date >= '2006-01-01' & data$Date < '2007-01-01')]

另一种使用方式format

data[data$Analyte =="ATRAZINE"
     & format(data$Date, "%Y") == '2006']
于 2010-06-16T07:18:01.277 回答
0

意识到这个问题已经在几年前被问到了,希望对未来的人有所帮助。

使用dplyr进行多条件子设置,转换为Date类型后检查年份

library(dplyr)

data %>% filter( Analyte=="ATRAZINE" & format(as.Date(Date,format = "%m/%d/%Y"),"%Y") == "2006") 
于 2016-03-17T07:51:55.093 回答