новая переменная с as.date в R

это head(both$stterm)

 stterm
1 2011-01-19
2 2012-01-19
3 2007-09-01
4 2011-09-01
5 2008-09-01
6 2013-09-01

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

Переменная должна быть непрерывной.

Я тестировал as.date, но тогда я только что получил столбец, полный NULL.

Важно, что 2008-09-01 = 8, а не 08

"2007-09-01"=7,
"2008-09-01"=8,
"2009-01-19"=9,
"2009-09-01"=9,
"2010-01-19"=10,
"2010-09-01"=10,
"2011-01-19"=11,
"2011-09-01"=11,
"2012-01-19"=12,
"2012-09-01"=12,
"2013-01-19"=13,
"2013-09-01"=13,
"2014-01-19"=14)

поэтому я хочу просто создать столбец с цифрами вместо фактических дат. новая переменная будет называться: calenderyear.

Мне нужны советы о том, как написать это в R


person malin    schedule 14.04.2015    source источник


Ответы (4)


Вы можете сделать это следующим образом:

require(lubridate)
dat$year <- year(as.Date(dat$stterm))-2000

Результат:

> dat
      stterm year
1 2011-01-19   11
2 2012-01-19   12
3 2007-09-01    7
4 2011-09-01   11
5 2008-09-01    8
6 2013-09-01   13

Данные:

dat <- read.table(header = TRUE, stringsAsFactors = FALSE, text = " stterm
1 2011-01-19
2 2012-01-19
3 2007-09-01
4 2011-09-01
5 2008-09-01
6 2013-09-01")
person Rentrop    schedule 14.04.2015

Попробуйте библиотеку lubridate

install.packages(lubridate)
library(lubridate)
year(ymd(both$stterm))-2000
person dimitris_ps    schedule 14.04.2015

ты можешь попробовать это

d <- as.Date(c("2007-09-01", "2008-09-01", "2009-01-19", "2009-09-01", "2010-01-19", "2010-09-01", "2011-01-19", "2011-09-01", "2012-01-19", "2012-09-01", "2013-01-19", "2013-09-01", "2014-01-19"), format="%Y-%m-%d")
sub("^0", "", sub("[[:digit:]]{2}([[:digit:]]{2}).*", "\\1", d))
 [1] "7"  "8"  "9"  "9"  "10" "10" "11" "11" "12" "12" "13" "13" "14"
person Mamoun Benghezal    schedule 14.04.2015

Вы можете попробовать сделать это, используя базу R: сначала воспроизведите подмножество вашего набора данных:

both <- data.frame( stterm=as.Date(c('2011-01-19','2012-01-19', '2007-09-01','2011-09-01','2008-09-01','2013-09-01')))

both
      stterm
1 2011-01-19
2 2012-01-19
3 2007-09-01
4 2011-09-01
5 2008-09-01
6 2013-09-01

both$calenderyear <- as.numeric(format(both$stterm,"%y"))
both
      stterm calenderyear
1 2011-01-19           11
2 2012-01-19           12
3 2007-09-01            7
4 2011-09-01           11
5 2008-09-01            8
6 2013-09-01           13
person amo    schedule 14.04.2015