0

私は以下のようなデータフレームを持っています。

    > avg_data
            date  region AveElapsedTime
    1   5/1/2012 preprod             23
    2   5/2/2012    prod             76
    3   5/3/2012    Beta             34
    4   5/4/2012    prod             30
    5   5/5/2012    Beta             22
    6   5/6/2012 preprod             32
    7   5/7/2012    Beta             21
    8   5/8/2012    prod             44
    9   5/9/2012 preprod             45
    10 5/10/2012    Beta             23
    11 5/11/2012    prod             50
    12 5/13/2012    Beta             26
    13 5/14/2012 preprod             33
    14 5/15/2012    Beta             75
    15 5/16/2012 preprod             56
    16 5/17/2012    Beta             32
    17 5/18/2012 preprod             67
    18 5/19/2012    prod             40

cbindを使用すると、正しい行番号が表示されません。

    > cbind(avg_data[avg_data$region == "preprod", "date" ], avg_data[avg_data$region == "preprod", "AveElapsedTime" ])
         [,1] [,2]
    [1,]    3   23
    [2,]   15   32
    [3,]   18   45
    [4,]    5   33
    [5,]    7   56
    [6,]    9   67

これは、グラフのプロット中に問題を引き起こします。x軸に日付、Y軸にAveElapsedTime値があります。2012年5月1日から最初のプロットを開始する代わりに、2012年5月3日から開始し、上記の行番号に基づいてプロットしようとしています。

以下のように表示されれば、グラフは正しく表示されます。

    Rownumber AveElapsedTime
         [,1] [,2]
    [1,]    1   23
    [2,]    6   32
    [3,]    9   45
    [4,]   13   33
    [5,]   15   56
    [6,]   17   67

これが私のコードです..現在機能しています..線の色を変更する必要があります..

    avg_data <- read.table("qes.tbl", header=T, sep=",")
    avg_data
    #        dl <- avg_data[avg_data$region == "prod", "AveElapsedTime"]
            #datel <- avg_data[avg_data$region == "prod", "date"]
    #Creating the graph pdf in the below path to give as a link in the mail
    FL <- 20120631
    file <- paste("graph", FL, "pdf", sep=".")
    plot_colors <- c("blue","red","forestgreen","black")
    pdf(file, height=4.5, width=9.5, onefile=TRUE)
    graphplot <- function(l, REG, tl, num) {
            dl <- REG[REG$region == l, tl]
            datel <- REG[REG$region == l, "date"]
            dl <- cbind(as.numeric(rownames(REG[REG$region == l, ])), REG[REG$region == l, tl])
            lines(dl, type="l", pch=2, col=plot_colors[num])
            num <- num + 1
    }
    drawGraph <- function(ab, y, z, s) {
            #Creating X axis
            x <- ab[ab$region == "Beta", z]
            y <- ab[,1]
            g_range <- range(0,x[!is.na(x)])
            plot(NA, type="l", col="orange", xlim= c(1, length(y)),  ylim=g_range,axes=FALSE, ann=FALSE)
            num=1
            sapply(unique(ab$region[ab$region]), FUN=graphplot, REG=ab, tl=z, num)
            box()
            axis(1, at=1:length(y), lab=FALSE)
            text(1:length(y), par("usr")[3] - 2, srt=45, adj=1.2, labels=y, xpd=T, cex=0.3)
            scale <- s
            axis(2, las=1, at=scale*0:g_range[2], cex.axis=0.3)
            main_title<-as.expression(z)
            #Caculationg Mean, Upper limit and lower limit using the below commands
            MEANLIMIT <- seq(length=length(y), from=mean(x), by=0)
            ULIMIT <- seq(length=length(y), from=mean(x) + 2.66*sum(abs(diff(x)))/length(x), by=0)
            LLIMIT <- seq(length=length(y), from=mean(x) - 2.66*sum(abs(diff(x)))/length(x), by=0)
            lines(MEANLIMIT, type="l", col="black")
            lines(ULIMIT, type="l", pch=2, lty=2, col="grey")
            lines(LLIMIT, type="l", pch=2, lty=2, col="black")
            title(main=main_title, col.main="red", font.main=4)
            title(xlab="Test Execution Date", col.lab=rgb(0,0.5,0))
            title(ylab="Millisecond", col.lab=rgb(0,0.5,0))
            legend("topright", g_range[2], main_title, cex=0.4, col=c("blue"), lty=1);
    }
    lab<-as.character(avg_data$date)
    AET <- avg_data$AveElapsedTime
    MTitle <- "AveElapsedTime"
    #Creating graph for Average Elapsed time
            drawGraph(avg_data, lab, MTitle, 5)
4

3 に答える 3

5

データフレームから単純な抽出を実行したいようです。ここでregion=="preprod"

それを行う方法は次のとおりです。

avg_data[avg_data$region=="preprod", c("date", "AveElapsedTime")]

        date AveElapsedTime
1   5/1/2012             23
6   5/6/2012             32
9   5/9/2012             45
13 5/14/2012             33
15 5/16/2012             56
17 5/18/2012             67

データをプロットするには、日付文字列を実際の日付に変換する必要があります。

x <- avg_data[avg_data$region=="preprod", c("date", "AveElapsedTime")]
x$date <- as.Date(x$date, format="%m/%d/%Y")
x

         date AveElapsedTime
1  2012-05-01             23
6  2012-05-06             32
9  2012-05-09             45
13 2012-05-14             33
15 2012-05-16             56
17 2012-05-18             67

ggplot次に、次のようにプロットします。

library(ggplot2)
x <- avg_data[avg_data$region=="preprod", c("date", "AveElapsedTime")]
ggplot(x, aes(date, AveElapsedTime)) + geom_bar(stat="identity")

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

またはベースグラフィックス:

x <- avg_data[avg_data$region=="preprod", c("date", "AveElapsedTime")]
plot(AveElapsedTime ~ date, data=x)

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

于 2012-07-12T07:11:54.283 に答える
1

これはあなたのために働きますか?

library(lubridate)
avg_data$date <- mdy(avg_data$date)
avg <- data.frame(avg_data[avg_data$region == "preprod", "date" ], avg_data[avg_data$region == "preprod", "AveElapsedTime" ])
plot(avg)
于 2012-07-12T07:11:11.100 に答える
1

最初の列として行番号だけを要求しているようです。もしそうなら:

cbind(as.numeric(rownames(avg_data[avg_data$region == "preprod", ])), 
      avg_data[avg_data$region == "preprod", "AveElapsedTime" ])
#      [,1] [,2]
# [1,]    1   23
# [2,]    6   32
# [3,]    9   45
# [4,]   13   33
# [5,]   15   56
# [6,]   17   67 

プロセス内の列の名前も変更する場合:

cbind(Rownames = as.numeric(rownames(
  avg_data[avg_data$region == "preprod", ])), 
      AveElapsedTime = avg_data[avg_data$region == "preprod", 
                                "AveElapsedTime" ])
于 2012-07-12T07:19:44.170 に答える