subconjunto a data.frame com várias condições
Pergunta
Suponha que meus dados se pareçam com o seguinte:
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
Quero poder subconjuntar pelo analito e uma correspondência parcial na data (ou seja, eu só quero o ano). Eu tenho tentado isso, mas sei que não está certo.
data[data$Analyte=="ATRAZINE" & grep("2006",as.character(data$Date)),]
Alguma sugestão?
Solução
Para esse problema, eu iria com a abordagem na resposta da fila de aprendizes de extrair o ano a partir da data, em vez de fazer a correspondência genérica de string. Eu sugeriria:
data[data$Analyte =="ATRAZINE"
& as.POSIXlt(data$Date, format="%m/%d/%Y")$year == 106]
Mas se você realmente tivesse que fazer a correspondência regexp, você pode usar grepl
que retorna um vetor lógico em vez de grep
que retorna um vetor de índices.
data[data$Analyte=="ATRAZINE" & grepl("2006",as.character(data$Date)),]
Outras dicas
Uma maneira de usar literais de data:
data[data$Analyte =="ATRAZINE"
& (data$Date >= '2006-01-01' & data$Date < '2007-01-01')]
Outra maneira de usar format
data[data$Analyte =="ATRAZINE"
& format(data$Date, "%Y") == '2006']
Perceba que essa pergunta foi feita há alguns anos, espero ajudar alguém no futuro.
Usado DPLYR para subconjunto usando várias condições e verificar o ano após a conversão em tipo de data
library(dplyr)
data %>% filter( Analyte=="ATRAZINE" & format(as.Date(Date,format = "%m/%d/%Y"),"%Y") == "2006")