簡體   English   中英

繪制時間間隔的重疊

[英]Plot overlaps of time intervals

我有以下df

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)的間隔。 首先,我將開始日期和結束日期轉換為潤滑間隔。 我想繪制間隔並計算每組結束與下一組開始之間的時間差(如果沒有重疊)。 我嘗試使用IRanges包並將日期轉換為整數(如此處使用的(鏈接) ),但對我不起作用。

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出現此錯誤:

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)

有人使用其他軟件包有其他解決方案嗎?

據我所知,IRanges是解決此問題的最佳工具。 IRanges需要范圍值(在這種情況下為日期)進行比較,並且不處理未定義的值(NA)

為了解決此問題,在進行分析之前,我將刪除df中具有NA的所有行。

df <- df[complete.cases(df[ , 1:2]),]

刪除NA的說明和其他方法,請參閱刪除data.frame中具有全部或部分NA(缺少值)的行

如果這不能解決問題,則可以將日期轉換為整數。 重要的是日期具有年月日格式,以確保正確的時間間隔。

例:

str <- "2006-06-26"


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

result <- paste(splitted,collapse="")
[1] "20060626"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM