假设我的数据如下:
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
我希望能够通过Analyte进行子集化并在日期上进行部分匹配(即我只想要年份)。我一直在尝试这个,但我知道这不太对。
data[data$Analyte=="ATRAZINE" & grep("2006",as.character(data$Date)),]
有什么建议吗?
答案 0 :(得分:3)
对于这个问题,我会采用Apprentice Queue的方法来解决从日期中提取年份而不是进行通用字符串匹配的方法。我建议:
data[data$Analyte =="ATRAZINE"
& as.POSIXlt(data$Date, format="%m/%d/%Y")$year == 106]
但是如果你真的必须进行正则表达式匹配,你可以使用grepl
返回一个逻辑向量而不是grep
,它返回一个索引向量。
data[data$Analyte=="ATRAZINE" & grepl("2006",as.character(data$Date)),]
答案 1 :(得分: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']
答案 2 :(得分:0)
多年前就已经问过这个问题了,希望将来可以帮助一些人。
使用dplyr进行使用多个条件的子设置,并在转换为Date type
后检查年份library(dplyr)
data %>% filter( Analyte=="ATRAZINE" & format(as.Date(Date,format = "%m/%d/%Y"),"%Y") == "2006")