3

dput(x)

structure(list(Host = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L), .Label = "A", class = "factor"), TimeStamp = structure(c(1L, 
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("1/11/2013", 
"1/12/2013", "1/13/2013", "1/14/2013", "1/15/2013"), class = "factor"), 
    Instance = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
    2L), .Label = c("/application", "/db"), class = "factor"), 
    Free_Space = c(5048L, 5049L, 6000L, 4800L, 5100L, 317659L, 
    340000L, 350000L, 356666L, 370000L), Used_Space = c(3017L, 
    56000L, 60000L, 55000L, 54000L, 271657L, 150000L, 175000L, 
    165000L, 189999L), Total_Space = c(8064L, 61049L, 66000L, 
    59800L, 59100L, 589316L, 490000L, 525000L, 521666L, 559999L
    )), .Names = c("Host", "TimeStamp", "Instance", "Free_Space", 
"Used_Space", "Total_Space"), class = "data.frame", row.names = c(NA, 
-10L))

私はこのデータフレームを持っています。Host、TimeStamp、および Instance を指定して、data.table パッケージを使用して Free_Space および Used_Space を追加することにより、列名 Total_Space を駆動します。

x<-data.table(x)
x<-x[,Total_Space:=Free_Space+Used_Space, by=c("Host", "Instance", "TimeStamp")]

私は ggplot2 の ggplot facet_wrap を使用して使用済みスペースを GB 単位でグラフ化し、Total_Space で geom_line を描画して、ユーザーがヘッドルームの量を確認できるようにしています。

たとえば、私はこれをやっています:

ggplot(x, aes(TimeStamp, Used_Space/1024, group=Instance)) + geom_area(fill="blue") + geom_smooth(method="lm", colour="orange",se=T, size=1) + geom_hline(data=x, aes(yintercept = Total_Space/1024), col="red")+ facet_wrap(~Host+Instance, ncol=3, scales="free") 

私が見ている問題は、Total_Space が変更されているため、同じインスタンスとホストに対して複数の geom_hline を取得することです。

私の質問は、インスタンスとホストごとに geom_hline を実行するときに、どのように最新のタイムスタンプを選択できますか? geom_hline に最新の Total_Space を表示する必要があります。

私はこのアプローチを試しました:

x<-x[,LatestTS:=tail(p[order(p$TimeStamp),],1)$Total_Space, by=c("Host", "Instance", "TimeStamp")]

動作しませんでした。すべてのインスタンスで同じ番号が選択されます。

4

1 に答える 1

4

私の解決策は、まず、あなたのコラムTimeStampを日付にすることです

x$TimeStamp<-as.Date(x$TimeStamp,format="%m/%d/%Y")

次に、データオブジェクトがであるため、 anddata.tableに従ってデータをサブセット化でき、setは最大値である必要があります。HostInstanceTimeStamp

x[,.SD[TimeStamp==max(TimeStamp)],by="Host,Instance"]
   Host     Instance  TimeStamp Free_Space Used_Space Total_Space
1:    A /application 2013-01-15       5100      54000       59100
2:    A          /db 2013-01-15     370000     189999      559999

これで、この行を内で使用できますgeom_hline()。これscale_x_date()で、このスケールを制御するためのより多くの可能性が得られます。

library(scales)
ggplot(x, aes(TimeStamp, Used_Space/1024, group=Instance)) + 
  geom_area(fill="blue") + geom_smooth(method="lm", colour="orange",se=T, size=1) + 
  geom_hline(data=x[,.SD[TimeStamp==max(TimeStamp)],by="Host,Instance"], aes(yintercept = Total_Space/1024), col="red")+ 
  facet_wrap(~Host+Instance, ncol=3, scales="free") +
  scale_x_date(labels = date_format("%m/%d/%Y"))

ここに画像の説明を入力してください

于 2013-03-14T19:12:40.350 に答える