подмножество data.frame с несколькими условиями - PullRequest
3 голосов
/ 16 июня 2010

Предположим, мои данные выглядят так:

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

Есть предложения?

Ответы [ 3 ]

3 голосов
/ 16 июня 2010

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

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 голосов
/ 16 июня 2010

Один способ с использованием литералов даты:

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

Другой способ с использованием format

data[data$Analyte =="ATRAZINE"
     & format(data$Date, "%Y") == '2006']
0 голосов
/ 17 марта 2016

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

Используется dplyr для поднабора с использованием нескольких условий и проверки года после преобразования в тип даты

library(dplyr)

data %>% filter( Analyte=="ATRAZINE" & format(as.Date(Date,format = "%m/%d/%Y"),"%Y") == "2006") 
...