r - 绘制时间间隔的重叠
问题描述
我有以下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"
推荐阅读
- android - Coordinator 布局内的回收站视图
- android - 如何在颤动中更改 FutureBuilder 的 connection.state
- google-chrome-extension - 使用 manifest.json 中的键字段将 chrome 扩展发布到 chrome webstore 时出现问题
- node.js - 是否有必要对我的 nodeJS API 实现多线程?
- google-api - Google Drive API 重新授权后,部分数据会丢失
- sql - 如何在 Oracle 中编写这种查询
- api - Microsoft Graph API getSchedule 按日历筛选
- php - Cakephp 错误:分类关联未在购物车上定义
- python - Python如何从特定类型的列表中获取值
- javascript - 将 HTML 项目捆绑到一个 HTML 文件中