2015-05-03 2 views
3

Я пытаюсь сделать подмножество из моего кадра данных, за исключением тех, что были до 01/01/2012. Формат даты находится в %d-%-m-%y, и программа уже знает, что это дата. Рамка данных TA, переменная DATE_OLD. Я пробовал: new <- subset(TA, TA$JDATE_OLD<"01-01-2012"), с очевидным успехом.Подмножество по дате в R

Это возвращает меня, что $ является недействительным оператором для атомных векторов. Любая помощь будет оценена. Спасибо.

+3

Просьба показать некоторые примеры данных, используя ('dput') и ожидаемый результат на основе этого. Возможно, ваш набор данных является матрицей. Также конвертируйте в формат даты, т. Е. 'TA $ JDATE_OLD <- as.Date (TA $ JDATE_OLD, format = '% d-% m-% Y')' перед подмножеством. – akrun

+0

akrun, конечно, конечно, вам нужно поставить * много * больше усилий, чтобы задать вопрос. Лучше всего опубликовать полный пример. –

ответ

4

Вам необходимо иметь правильное сравнение.

Начнут с произвольным кадром данных:

R> df <- data.frame(date=seq(as.Date("2015-01-01"), \ 
+       as.Date("2015-12-01"), by="month"), \ 
+     value=1000+(0:11)*42) 
R> df 
     date value 
1 2015-01-01 1000 
2 2015-02-01 1042 
3 2015-03-01 1084 
4 2015-04-01 1126 
5 2015-05-01 1168 
6 2015-06-01 1210 
7 2015-07-01 1252 
8 2015-08-01 1294 
9 2015-09-01 1336 
10 2015-10-01 1378 
11 2015-11-01 1420 
12 2015-12-01 1462 
R> 

Теперь, если вы хотите, чтобы все даты в прошлом августе, вы просто сделать индекс для больше-равно значению отсечения - и убедитесь, что он является Date тип тоже:

R> df[ df$date > as.Date("2015-08-01"), ] 
     date value 
9 2015-09-01 1336 
10 2015-10-01 1378 
11 2015-11-01 1420 
12 2015-12-01 1462 
R> 
+0

Я никогда не понимал, почему действительно, но просто 'df [df $ date>" 2015-08-01 ",]' также работает. –

+1

Возможно, существует функция диспетчеризации, которая вызывает 'as.Date()' на символьной строке с учетом LHS сравнения. Я использую 'POSIXct' чаще, чем' Date', и я уверен, что вы должны там указывать. Но я вполне мог ошибаться ... –