2012-02-01 69 views
1

我是R的新手,我認爲我需要做的是重塑,融化和強制轉換功能。我做了一些閱讀,但無法弄清楚如何去做。R重組數據幀

我有這樣一個數據幀:

) 
server1, 01/01/2012, Memory, 27.200000, 27.490000, 28.560000, 29.300000 
server1, 01/01/2012, disk , 2.330000, 22.380000, 7.580000, 2.440000 
server1, 01/01/2012, CPU 0.470000, 36.500000, 12.230000, 0.350000 
server1, 01/01/2012, interface 2.330000, 22.380000, 7.580000, 2.440000 

我喜歡這個數據幀轉換成這樣的事情,從而使R能夠容易地讀取和圖表這樣的數據:

server1, 01/01/2012:01:00, 27.200000, 2.330000,0.470000, 2.330000 
server1, 01/01/2012:02:00, 27.49, 22.38, 36.50, 22.38 
server1, 01/01/2012:03:00, 28.56, 7.58, 12.23, 7.58 
server1, 01/01/2012:04:00, 29.30, 2.44, 0.35, 2.44 
  1. 將ExtractedDate與Hour1結合在一起(例如,如果標題爲Hour1,則Existing Date應爲「01/01/2012 01:00」

  2. 將metrictype轉爲標題(標題應該是:將小時數據放在列中而不是行中。

有人可以幫助我嗎?

更新=======

熔體和投打,我的事情,我已經非常接近。我做這3個命令:

1. x <- data.frame(read.table("out.txt", sep=",", header=T)) 
2. y <- melt(x, id=c("Hostname", "Date", "Met")) 
3. yy <- cast(y, Hostname + Date + variable ~ Mete) 

我的輸出是這樣的:

 Hostname 

1 server1 01/29/2012 Hour1  0.72  2.33  23.76 
2 server1 01/29/2012 Hour2  2.38  2.86  23.82 
3 server1 01/29/2012 Hour3  9.59  6.25  24.85 
4 server1 01/29/2012 Hour4  31.09  18.41  25.87 
5 server1 01/29/2012 Hour5  0.42  1.92  24.24 
6 server1 01/29/2012 Hour6  1.79  2.65  24.31 

我現在面臨的問題是,我有日期和可變場結合起來。例如,第一行的日期字段應該是2012年1月29日01:00,第二行,2012年1月29日02:00等等,如果有人可以幫助我,這將是非常棒的。

+0

看起來像你已經融化/投出了,本身並不意味着壯舉。下面關於'gsub'的回答看起來不錯。你也應該看看'lubridate'包,這使得日期/時間變量變得更容易。 – 2012-02-01 23:18:53

+0

試試這個:'as.POSIXct(paste(yy $ Date,yy $ variable),format =「%m /%d /%Y Hour%H」)'。 – 2012-02-01 23:47:13

回答

3

使用類似gsub第一:

yy$variable <- as.integer(gsub('Hour', '', yy$variable)) 

然後把它變成一個POSIX時間格式:

YY $變量< - 粘貼(YY $變量, ':00:00',九月= '')

轉換你的日期日期:

yy$Date <- as.Date(yy$Date, format='%m/%d/%Y') 

的ñ混搭一起:

yy$date_time <- as.POSIXct(paste(yy$Date, yy$variable)) 

我認爲存在使用動物園包一個漂亮的方式,但我根本不都知道它做好。

+0

我這樣做時出現此錯誤: – 2012-02-02 14:03:18

+0

是啊!我忘了圍繞':00:00'的關鍵引用。它現在在我的答案中是固定的。 '「:00:00」' – Justin 2012-02-02 15:18:18

+0

非常感謝你,這很棒 – 2012-02-02 15:22:55