Teilmenge eine data.frame mit mehreren Bedingungen
Frage
Nehmen wir an meine Daten sieht wie folgt aus:
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
Ich mag von dem Analyte und eine teilweise Übereinstimmung mit dem Datum der Teilmenge können (nämlich ich will nur das Jahr). Ich habe dies versucht, aber ich weiß, es ist nicht ganz richtig.
data[data$Analyte=="ATRAZINE" & grep("2006",as.character(data$Date)),]
Irgendwelche Vorschläge?
Lösung
Für dieses Problem würde ich mit dem Ansatz in Apprentice Queue Antwort zu extrahieren das Jahr ab dem Zeitpunkt gehen, anstatt zu tun generisches String-Matching. Ich würde vorschlagen:
data[data$Analyte =="ATRAZINE"
& as.POSIXlt(data$Date, format="%m/%d/%Y")$year == 106]
Aber wenn Sie wirklich regexp Matching zu tun hatte, konnte man grepl
verwenden, die eine logische Vektor zurückgibt, anstatt grep
, die einen Vektor der Indizes zurück.
data[data$Analyte=="ATRAZINE" & grepl("2006",as.character(data$Date)),]
Andere Tipps
Eine Möglichkeit, mit Datumsliterale:
data[data$Analyte =="ATRAZINE"
& (data$Date >= '2006-01-01' & data$Date < '2007-01-01')]
Eine andere Art und Weise mit format
data[data$Analyte =="ATRAZINE"
& format(data$Date, "%Y") == '2006']
Erkennen diese Frage ganz vor einigen Jahren gefragt wurde, sollte hoffentlich jemanden in der Zukunft helfen.
Gebrauchte dplyr für Untereinstellungen mehrere Bedingungen verwendet, und Überprüfen des Jahres, nachdem sie in Datumsart Umwandlung
library(dplyr)
data %>% filter( Analyte=="ATRAZINE" & format(as.Date(Date,format = "%m/%d/%Y"),"%Y") == "2006")