我有以下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)的时间间隔。首先,我将开始和结束日期转换为lubridate时间间隔。如果没有重叠,我想绘制间隔图,并计算每组结束和下一组开始之间的天数时间差。我尝试使用IRanges包并将日期转换为整数(就像这里使用的(link)一样),但对我不起作用。
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)是否有人有使用其他包的其他解决方案?
发布于 2019-03-22 03:46:57
据我所知,IRanges是解决这个问题的最好的包。IRanges需要范围值(在本例中为dates)进行比较,并且不处理未定义的值(NAs)
为了解决这个问题,我会在进行分析之前删除df中包含NAs的所有行。
df <- df[complete.cases(df[ , 1:2]),]删除NAs的说明和其他方法请参阅Remove rows with all or some NAs (missing values) in data.frame。
如果这不能解决问题,您可以将日期转换为整数。重要的是,日期的格式为年-月-日,以产生正确的间隔。
示例:
str <- "2006-06-26"
splitted<- unlist(strsplit(str,"-"))
[1] "2006" "06" "26"
result <- paste(splitted,collapse="")
[1] "20060626"https://stackoverflow.com/questions/55287676
复制相似问题