2010-12-22 27 views
2

我當天的展示的每15分鐘的週期變流表和月中的每一天,例如:的OpenAir,96x31時間/日期數據爲堆疊數據

date,00:00,00:15,00:30, 
01-Nov,123,345,456, 
02-Nov,234,567,890 

我想這進入表格

date,value 
01-Nov 00:00,123 
01-Nov 00:15,345 
... 
02-Nov 00:00,234 

等等。我試過reshape,但我不明白如何指定「變化」並不斷收到失敗消息。

+2

一些玩具數據和你嘗試的代碼會有幫助 – 2010-12-22 12:49:21

回答

2

試試這個:

require(reshape) 
Df <- melt(dataframe,id.vars="date",variable_name="time") 
Df <- Df[order(Df$date),] 

其中「數據幀」是你正在使用的數據幀的名稱。如果您希望將列日期和時間結合起來,你可以使用如:

Df2 <- with(Df, 
     data.frame(
      date = paste(date,time), 
      value = value 
     ) 
     ) 

如果不工作,或者不給你想要的東西,你必須向我們提供更多的信息。

1

目前看來您可能只有日期和數據,但知道您要添加的關聯時間。動物園包中可能有非常緊湊的方法,可以在一行中完成此操作,但這裏有一個工作示例,顯示5或6個步驟過程,在兩天內以2小時間隔讀取數據(沒有時間標籤),並從寬範圍重構格式datafrm以長格式datafrm與日期時間入級時間變量:

require(reshape2) 
txt<-"01-Nov,123,345,456,345,565,345,464,345, 123,345,456,345 
02-Nov,234,567,890,345,565,345,464,345, 123,345,456,345" 
tstdf <- read.table(textConnection(txt), header=FALSE, sep=",") 
mtst <- melt(tstdf, id.vars="V1",variable_name="time") 
mtst$dt <- as.Date(mtst$V1, format="%d-%B") 
mtst <- cbind(mtst, tm= 120*(0:11)) 
mtst$dt.tm <- as.POSIXct(mtst$dt) +60*120*(0:11) 
'data.frame': 24 obs. of 6 variables: 
    $ V1 : Factor w/ 2 levels " 02-Nov","01-Nov": 2 1 2 1 2 1 2 1 2 1 ... 
    $ time : Factor w/ 12 levels "V2","V3","V4",..: 1 1 2 2 3 3 4 4 5 5 ... 
    $ value: int 123 234 345 567 456 890 345 345 565 565 ... 
    $ dt :Class 'Date' num [1:24] 14914 14915 14914 14915 14914 ... 
    $ tm : num 0 120 240 360 480 600 720 840 960 1080 ... 
    $ dt.tm: POSIXct, format: "2010-10-31 20:00:00" "2010-11-01 22:00:00" ... 

你會變化的Tm =分配到第15(0:95),並有4小時上顯示的時間偏移,因爲我在美國東部tz。如果你想獲得的時間顯示爲在午夜,你可以添加4小時的偏移量,UCT默認:

mtst$dt.tm <- as.POSIXct(mtst$dt, tz="EST") +60*120*(0:11) + 60*240 
0

下面是一個XTS的解決方案:

library(xts) 
# Sample data: 
Lines <- "date,00:00,00:15,00:30 
01-Nov,123,345,456 
02-Nov,234,567,890" 
con <- textConnection(Lines) 
Data <- read.csv(con, stringsAsFactors=FALSE) 
close(con) 
# times to add to the date for each column 
mins <- as.numeric(gsub("[[:alpha:]]","",colnames(Data)))/0.6 * 3600 
# POSIXct index for xts object 
idx <- as.POSIXct(Data$date, format="%d-%b") 
# Create a list of xts object and rbind them 
x <- do.call(rbind, lapply(2:4, function(i) xts(Data[,i], idx+mins[i]))) 
1

假設一個連續均勻間隔的系列與所指示的格式的日期,以便有每行4個* 24個值下面給出使用克隆氏病的日期/時間類它用於zooreg系列:

library(zoo) 
library(chron) 

DF <- read.csv("myfile.csv", as.is = TRUE) 
z <- zooreg(c(t(DF[-1])), start = as.chron(DF[1,1], "%d-%b"), freq = 4 * 24) 

as.data.frame(z)會將它變成一個數據框,並且這個數據框會在行名中顯示時間,或者data.frame(Time = time(z), Value = coredata(z))會給它自己的列賦予時間(儘管你可能會更好地將它作爲動畫片系列,因爲這樣可以更方便地進一步操作)。

相關問題