[英]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.