1

我正在尝试制作甘特图来捕获我将要分析的数据的时间覆盖率。我在 plotrix 中使用 gantt.chart。

这是我的数据:(id、开始日期、结束日期、优先级)

id <- c( "1993", "1993", "1993", "1994", "1994", "1994", "1995", "1995", "1995", "1995", "1995", "1996", "1996", "1996", "1997",  "1998",
     "1999", "2000", "2001", "2001", "2002", "2003", "2003", "2003", "2003", "2003", "2004", "2004", "2004", "2004", "2005", "2005",
     "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015")

startdate <- c( "1993/09/25", "1993/12/02", "1994/04/16", "1993/12/02", "1993/12/03", "1994/03/10", "1993/09/27",
            "1993/12/08", "1994/04/17", "1994/03/25", "1994/03/30", "1993/10/01", "1993/12/14", "1994/01/02",
            "1993/11/09", "NA", "NA", "NA", "1994/04/23", "1994/04/09", "NA",      
            "1994/03/28", "1994/04/12", "1994/03/27", "1994/04/05", "1994/04/12", "1993/10/02", "1994/03/29",
            "1994/04/15", "1994/04/21", "1993/09/19", "1994/04/17", "NA", "NA", "NA",      
            "NA",        "NA",      "NA",       "NA",      "1993/09/24", "1993/09/23", "1993/09/23")

enddate <- c("1993/10/04", "1993/12/14", "1994/05/21", "1993/12/06", "1993/12/17", "1994/04/05", "1993/10/16",
         "1993/12/29", "1994/07/10", "1994/07/15", "1994/06/26", "1993/10/17", "1993/12/31", "1994/01/27",
         "1994/04/17", "NA",      "NA",    "NA",    "1994/08/10", "1994/05/12", "NA",       
         "1994/07/20", "1994/07/05", "1994/06/21", "1994/06/17", "1994/06/17", "1993/12/09", "1994/06/02",
         "1994/06/02" ,"1994/05/27", "1994/01/15", "1994/06/04", "NA",    "NA",  "NA",  
         "NA",   "NA",     "NA",     "NA",  "1993/10/09", "1993/10/08", "1993/10/04")

prior <- c( 1 , 1, 1,  1 , 3,  3,  1 , 1,  1,  2,  2 , 1 , 1 , 1,  3, NA, NA, NA,  2,  3, NA,  1,  3,  1,  2,  3,  1,
        1 , 2,  3 , 1  ,2 ,NA ,NA ,NA, NA, NA, NA, NA,  4,  4,  4)

这是我正在使用的代码:

Ymd.format<-"%Y/%m/%d"
gantt.info1 <-list(labels=id,
             starts=as.POSIXct(strptime(startdate,
                                        format=Ymd.format)),
             ends=as.POSIXct(strptime(enddate,
                                      format=Ymd.format)),
             priorities=prior)



gantt.chart(x=gantt.info1, 
        format="Ymd.format",
        taskcolors=rainbow,
        priority.legend=TRUE,
        vgridpos=NULL,
        vgridlab=NULL,
        vgrid.format= NULL,
        half.height=0.25,
        hgrid=FALSE,
        main="Title",
        xlab="months",
        cylindrical=FALSE,
        label.cex=1, 
        border.col=NA, 
        priority.label="Priorities",
        time.axis=3)

这是我收到的错误消息:

if (any(x$starts > x$ends)) stop("Can't have a start date after an end date") 出错:需要 TRUE/FALSE 的地方缺少值

首先,我已经检查了三倍,我所有的日期都是有效的。我认为这可能是我使用时 NA 的问题

is.na(startdate)

它返回所有 FALSE 响应。所以我将所有 NA 值分配为“NA”

startdate[16] = NA

而且我还删除了所有 NA 并使用新数据运行它,但都没有工作,我收到相同的错误消息。

我敢肯定这是我没有想到的简单事情,但我花了几天时间试图解决这个问题,只需要帮助解决它。

非常感谢您的宝贵时间!

4

0 回答 0