2015-04-14 2 views
0

это head(both$stterm)новые переменное с as.date в R

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

ответ

1

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

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") 
1

Попробуйте сделать lubridate библиотеку

install.packages(lubridate) 
library(lubridate) 
year(ymd(both$stterm))-2000 
1

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

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" 
1

Вы можете попробовать сделать это с помощью базы 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 
Смежные вопросы