2013-11-17 2 views
0
> print(ts(as.character(seq(as.Date("2013-9-1"),length.out=30,by=1)), frequency = 7, start = c(1, 7)), calendar = TRUE) 
      p1   p2   p3   p4   p5   p6   p7 
1                 2013-09-01 
2 2013-09-02 2013-09-03 2013-09-04 2013-09-05 2013-09-06 2013-09-07 2013-09-08 
3 2013-09-09 2013-09-10 2013-09-11 2013-09-12 2013-09-13 2013-09-14 2013-09-15 
4 2013-09-16 2013-09-17 2013-09-18 2013-09-19 2013-09-20 2013-09-21 2013-09-22 
5 2013-09-23 2013-09-24 2013-09-25 2013-09-26 2013-09-27 2013-09-28 2013-09-29 
6 2013-09-30 

Я хочу, чтобы получить data.frame от ц, как и имеют две особенности:
1.rownames составляет 1 2 3 4 5 6
2.colnames Пн Вт Ср Чт Пт Сб Вс
как я могу его получить?как передать ts в data.frame?

Mon    Tue  Wed  Thu  Fri  Sat   Sun 
1                 2013-09-01 
2 2013-09-02 2013-09-03 2013-09-04 2013-09-05 2013-09-06 2013-09-07 2013-09-08 
3 2013-09-09 2013-09-10 2013-09-11 2013-09-12 2013-09-13 2013-09-14 2013-09-15 
4 2013-09-16 2013-09-17 2013-09-18 2013-09-19 2013-09-20 2013-09-21 2013-09-22 
5 2013-09-23 2013-09-24 2013-09-25 2013-09-26 2013-09-27 2013-09-28 2013-09-29 
6 2013-09-30 

Возможно, это самый быстрый способ передачи data.frame из моего кода.

+0

Для удовольствия, после этого вопроса, я написал [эту функцию] (https://gist.github.com/mrdwab/7515611). – A5C1D2H2I1M1N2O1R2T1

ответ

0

Я хотел бы попробовать что-то вроде этого:

## Your daily time series data 
out <- ts(as.character(seq(as.Date("2013-9-1"), 
      length.out = 30, by = 1)), 
      frequency = 7, start = c(1, 7)) 

## Comes in useful later 
WD <- c("Monday", "Tuesday", "Wednesday", "Thursday", 
     "Friday", "Saturday", "Sunday") 

## Create your data as a long data.frame 
## Extract the weekdays using the weekdays function 
out2 <- data.frame(weekday = weekdays(as.Date(as.character(out))), out) 

## Use cumsum to determine the weeks. We'll start our weeks on Monday 
out2$week <- cumsum(out2$weekday == "Monday") 

## This is your new "long" dataset 
head(out2) 
#  weekday  out week 
# 1 Sunday 2013-09-01 0 
# 2 Monday 2013-09-02 1 
# 3 Tuesday 2013-09-03 1 
# 4 Wednesday 2013-09-04 1 
# 5 Thursday 2013-09-05 1 
# 6 Friday 2013-09-06 1 

Оттуда, это довольно легко «перекроить» ваши данные (либо с базой R-х reshape, или более удобно, с dcast от «reshape2»).

library(reshape2) 
dcast(out2, week ~ weekday, value.var="out", fill="")[WD] 
#  Monday Tuesday Wednesday Thursday  Friday Saturday  Sunday 
# 1                 2013-09-01 
# 2 2013-09-02 2013-09-03 2013-09-04 2013-09-05 2013-09-06 2013-09-07 2013-09-08 
# 3 2013-09-09 2013-09-10 2013-09-11 2013-09-12 2013-09-13 2013-09-14 2013-09-15 
# 4 2013-09-16 2013-09-17 2013-09-18 2013-09-19 2013-09-20 2013-09-21 2013-09-22 
# 5 2013-09-23 2013-09-24 2013-09-25 2013-09-26 2013-09-27 2013-09-28 2013-09-29 
# 6 2013-09-30  
0

Это должно работать:

time.df<-data.frame(date=as.Date(c(time))) 
time.df$day<-strftime(time.df$date,'%A') 
time.df$year.week<-strftime(time.df$date,'%Y-%W') # Monday starts week. 
# Just to avoid locale differences, get the names of the days of week in current locale. 
dows<-strftime(seq(as.Date('2013-11-18'),(as.Date('2013-11-18')+6),by=1),'%A') 
dow.order<-paste('date',dows,sep='.') 
calendar<-reshape(time.df,idvar='year.week',timevar='day',direction='wide') [dow.order] 
rownames(calendar)<-NULL 
colnames(calendar)<-dows 
calendar 
#  Monday Tuesday Wednesday Thursday  Friday Saturday  Sunday 
# 1  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 2013-09-01 
# 2 2013-09-02 2013-09-03 2013-09-04 2013-09-05 2013-09-06 2013-09-07 2013-09-08 
# 3 2013-09-09 2013-09-10 2013-09-11 2013-09-12 2013-09-13 2013-09-14 2013-09-15 
# 4 2013-09-16 2013-09-17 2013-09-18 2013-09-19 2013-09-20 2013-09-21 2013-09-22 
# 5 2013-09-23 2013-09-24 2013-09-25 2013-09-26 2013-09-27 2013-09-28 2013-09-29 
# 6 2013-09-30  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 

Но мне интересно, почему вы когда-нибудь понадобится это.

+0

Кроме того, этот код не будет работать точно, если год увеличивается. Он покинет «пространство» «NA» в течение нескольких месяцев. Вы могли бы написать код, который мог бы избежать этого, но это было бы очень неприятно. – nograpes

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