2015-05-28 2 views
-2

empdata является dataframe, как указано ниже:фильтр dataframe на основе заданного значения

employee <- c('John','Peter','Jolie') 
salary <- c(10000, 20000, 30000) 
startdate <- as.Date(c('2010-11-1','2010-11-25','2011-10-14')) 
empdata <- data.frame(employee, salary, startdate) 

Я хочу, чтобы извлечь общее количество строк в empdata где дата находится между [StartDate] и [EndDate]. Например, если StartDate = 2010-11-1 и EndDate = 2010-11-30, то я хочу ответить = 2.

+1

Использование 'data.table' (если приведенные ниже ответы - это то, что вы ищете); 'setDT (empdata) [между (startdate, startDate, endDate), .N]' – akrun

+0

На основании данных, которые вы предоставили, я получил результат как '2'. 'setDT (empdata) [между (startdate, startDate, endDate), .N] # [1] 2', учитывая, что' startDate' и 'endDate' также являются классом дат – akrun

+0

Я не знаю проблемы на вашей стороне , Я использую версию data.table. – akrun

ответ

1

Вы можете попробовать:

mystartdate = '2010-11-01' 
mystopdate = '2010-11-30' 

empdata[empdata$startdate > mystartdate & empdata$startdate < mystopdate,] 
+1

Я не думаю, что будет работать с символьным представлением start/enddate –

+0

Запустить POSIXt за дату – NEO

+0

Вы не поняли, что я имел в виду. Что касается вашего комментария, '' 'dispatching метода будет обрабатывать эту часть. Неважно. –

2

Я думаю, что это должно помочь вам

NROW(empdata[(empdata$startdate >= "startdate" & empdata$startdate <= "enddate"),]) 

Это даст вам количество строк в отфильтрованном фрейме данных.

+0

Не вернул ли он 1? Shoudn't это должно быть '> =' (если желаемый ответ равен 2, как указано OP)? – ztl

+0

спасибо за указание @ztl – Saksham

1

Пакет dplyr делает такие вещи легко и эффективно (хорошо для больших наборов данных). здесь:

library(dplyr) 
mystartdate = '2010-11-1' 
mystopdate = '2010-11-30' 
# First filter you dataframe, then count the number of rows 
nrow(filter(empdata, startdate >= mystartdate & startdate <= mystopdate)) 

Примечание: Я полагаю, из вашего поста, что она должна включать в указанную дату (так как желаемый ответ 2). Обязательно проверяйте операторов в соответствии с вашими потребностями.

Смежные вопросы