2016-04-12 3 views
24

Как удалить первые элементы из переменной, особенно если эта переменная имеет специальные символы. Например, у меня есть следующий столбец:Извлечение год с даты

Date 
01/01/2009 
01/01/2010 
01/01/2011 
01/01/2012 

мне нужно иметь новый столбец, как следующее:

Date 
2009 
2010 
2011 
2012 
+9

Измени 'Дата' класс и использовать 'format' извлечь 'год' – akrun

+5

или' GSUB ("* /", "", ДФ $ Date) 'или' – mtoto

+2

substr (as.character (....), 7, 10) ' – jogo

ответ

7

если все даты ваших имеют одинаковую ширину, вы можете поставить даты в вектор и использование подстроки

Date 
a <- c("01/01/2009", "01/01/2010" , "01/01/2011") 
substring(a,7,10) #This takes string and only keeps the characters beginning in position 7 to position 10 

выход

[1] "2009" "2010" "2011" 
64

Как обсуждалось в комментариях, это может быть достигнуто путем преобразования в формат записи Date и извлекая год, например, так:

format(as.Date(df1$Date, format="%d/%m/%Y"),"%Y") 
+0

Hadley and Lubridate проще –

+0

Почему, черт возьми, это работает? Если я посмотрю на документацию 'format()', о втором аргументе, о котором вы указали, ничего не сказано. Как я должен это понимать? – scarface

+0

Из формата '? Format':" является ** общей функцией **. Помимо методов, описанных здесь, существуют методы для дат (** см. Format.Date **) ". Из '? Format.Date':« ## S3 метод для формата «Дата» (x, ...) [где ... \t обозначает] дополнительные аргументы, передаваемые из или в другие методы **, включая формат для as.character и as.Date ** ". См. Также первый пример в формате '. Format.Date'. – RHertel

1

Сначала преобразовать его в формат даты с помощью Дата < -c («01/01/2009», «01/01/2010», «01/01/2011», «01/01/2012»)

год (as.Date (дата, "% d /% m /% Y ")) #it даст только годы Надеюсь, это поможет вам! :)

+3

Это будет работать только с 'library (lubridate)' установлен и загружен, я думаю. 'year()' не является функцией из 'base'. –

+0

Да, мы должны загрузить смазку, чтобы сделать наши вычисления такими легкими. –

+0

Вы должны указать, что в вашем ответе будет ясно –

4

Вы можете извлечь год от объекта даты, используя функцию год из пакета lubridate.

library(lubridate) 

year("2016-12-08")

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