2010-06-16 4 views
3

Предположим, что мои данные выглядит следующим образом:подмножество data.frame с несколькими условиями

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)),] 

Любые предложения?

+1

Похожие вопросы: http://stackoverflow.com/questions/1536590/how-to-select- rows-from-data-frame-with-2-conditions и http://stackoverflow.com/questions/2844669/r-question-create-new-data-set-that-meets-all-of-4-conditions/ 2844687 # 2844687 – Shane

ответ

3

Для этой задачи я бы с подходом в ответе Apprentice очереди в экстрагированиях года с даты, а не выполнение общего соответствия строк. Я хотел бы предложить:

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)),] 
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'] 
+3

С помощью 'subset' вы можете пропустить' $ 'ссылки, например:' subset (data, Analyte == "ATRAZINE" & format (Date, "% Y") == "2006") '. И в вашем первом решении 'as.Date' необходимо. – Marek

+1

as.Date не требуется, так как R автоматически преобразует его в Date. –

+0

Моя ошибка. Я пропустил, какая версия R была изменена. Как только у меня была ошибка в R-2.2.0, и с этого момента я всегда использовал 'as.Date'. Время переписать весь мой код :) – Marek

0

Поймите, что этот вопрос задан несколько лет назад, надеюсь, что он поможет кому-то в будущем.

Используется dplyr для суб-установки с использованием нескольких условий, а также проверки на следующий год после преобразования в Date типа

library(dplyr) 

data %>% filter(Analyte=="ATRAZINE" & format(as.Date(Date,format = "%m/%d/%Y"),"%Y") == "2006") 
Смежные вопросы