首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制时间间隔的重叠图

绘制时间间隔的重叠图
EN

Stack Overflow用户
提问于 2019-03-22 03:09:58
回答 1查看 171关注 0票数 1

我有以下df

代码语言:javascript
复制
Id   a_min_date      a_max_date      b_min_date     b_max_date       c_min_date       c_max_date           d_min_date     a_max_date
1    2014-01-01      2014-01-10      2014-01-05     2014-01-15            NA               NA              2014-02-20       2014-05-01
2    2014-02-01      2014-02-10       NA              NA               2015-02-20       2015-03-01             NA               NA    

我已经按ID添加了每个组(a,b,c,d)的时间间隔。首先,我将开始和结束日期转换为lubridate时间间隔。如果没有重叠,我想绘制间隔图,并计算每组结束和下一组开始之间的天数时间差。我尝试使用IRanges包并将日期转换为整数(就像这里使用的(link)一样),但对我不起作用。

代码语言:javascript
复制
ir <- IRanges::IRanges(start = as.integer((as.Date(df$a_min_date))), end = as.integer((as.Date(df$a_max_date))))
bins <- disjointBins(IRanges(start(ir), end(ir) + 1))
dat <- cbind(as.data.frame(ir), bin = bins)

ggplot(dat) + 
  geom_rect(aes(xmin = start, xmax = end,
                ymin = bin, ymax = bin + 0.9)) +
  theme_bw()

对于我的原始df,我得到了这个错误:

代码语言:javascript
复制
Error in .Call2("solve_user_SEW0", start, end, width, PACKAGE = "IRanges") : 
  solving row 1: range cannot be determined from the supplied arguments (too many NAs)

是否有人有使用其他包的其他解决方案?

EN

回答 1

Stack Overflow用户

发布于 2019-03-22 03:46:57

据我所知,IRanges是解决这个问题的最好的包。IRanges需要范围值(在本例中为dates)进行比较,并且不处理未定义的值(NAs)

为了解决这个问题,我会在进行分析之前删除df中包含NAs的所有行。

代码语言:javascript
复制
df <- df[complete.cases(df[ , 1:2]),]

删除NAs的说明和其他方法请参阅Remove rows with all or some NAs (missing values) in data.frame

如果这不能解决问题,您可以将日期转换为整数。重要的是,日期的格式为年-月-日,以产生正确的间隔。

示例:

代码语言:javascript
复制
str <- "2006-06-26"


splitted<- unlist(strsplit(str,"-"))
[1] "2006" "06"   "26"

result <- paste(splitted,collapse="")
[1] "20060626"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55287676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档