繁体   English   中英

R 中的结构化和交叉引用时限数据点

[英]structuring and cross-referencing time-bound data points in R

这是一个分为两部分的问题,第一个问题是关于如何构建我的数据,第二个问题是关于我的研究设计的建议。

我有三组数据,如下所示:

数据集样本 1

开始时间 停止时间 字符
0 9.719 一种
9.719 11.735
11.735 14.183 一种
14.183 16.554 C
16.554 18.482 一种
18.482 19.553

它们是 csv 格式,是从视频注释软件工具导出的。 每行代表一个注释,第一列显示注释开始的时间,第二列显示注释结束的时间。 第三列中的值是对特定注释中描述和/或谈论的特定字符的引用。

数据集 2 和 3 看起来相同,尽管所有三列的值都不同。 重要的是,数据集 2 和 3 来自同一记录。 因此,我有三个“频道”,在其中展示/讨论相同的角色,但并不总是同时出现。

如果数据成功导入 R 并在时间尺度上可视化,它应该看起来像这样:

所需可视化的草图

Y 轴将是三个不同的数据集或“通道”,X 轴将是整个记录的持续时间。 此处绘制的数据点将代表注释及其开始和结束时间。

问题#1

我如何适当地构建我的数据,以便将特定值(A、B 或 C)绑定到其特定的开始和停止时间? 我想象涉及嵌入式矢量,但我不确定如何设置它。

完成后,使用什么 plot 来可视化数据并确认它显示的是我想要显示的内容? 也许像马赛克 plot?

问题2

适当设置数据后,我想调查字符值(A、B、C)何时与其他通道(1、2、3)中的相同值对齐或不对齐。 我将如何 go 这样做? 我想我需要三个通道(1、2 或 3)中的一个作为一种锚点。 因此,类似于:

“对于通道 1 中的每个 A 值,通道 2 和 3 中有哪些值与其重叠?”

我还希望能够指向查询给定通道中的特定数据点并提取其值以及与它同时出现的其他通道中的数据点的值。 因此,我应该能够在通道 2 中提取数据点 #15 并获取其值(A、B 或 C)以及在数据点 #15 的持续时间的 window 中同时出现的数据点数量其他渠道(及其价值)。

这个问题本质上有点探索性,非常感谢对这两个问题的任何和所有答案、建议和反馈。

不确定问题 2 副手,但对于问题 1...

我认为当前格式很好,但在 R 中,您可能希望它出现在一帧(而不是 3 帧)中,其中数据集名称(和/或提取的数字)是一列。 例如,如果您上面的文件在file1.csv中,那么其他文件也可能在file2.csvfile3.csv中。 阅读和组合它们可以通过以下方式完成:

allfiles <- lapply(setNames(nm = list.files(pattern="csv$")), read.csv)
alldat <- dplyr::bind_rows(allfiles, .id = "dataset")
alldat
#      dataset start.time stop.time char
# 1  file1.csv      0.000     9.719    A
# 2  file1.csv      9.719    11.735    B
# 3  file1.csv     11.735    14.183    A
# 4  file1.csv     14.183    16.554    C
# 5  file1.csv     16.554    18.482    A
# 6  file1.csv     18.482    19.553    B
# 7  file2.csv      0.000    11.693    A
# 8  file2.csv     11.693    12.310    B
# 9  file2.csv     12.310    13.912    A
# 10 file2.csv     13.912    15.406    C
# 11 file2.csv     15.406    16.988    A
# 12 file2.csv     16.988    19.553    B
# 13 file3.csv      0.000     7.777    A
# 14 file3.csv      7.777    12.920    B
# 15 file3.csv     12.920    15.449    A
# 16 file3.csv     15.449    15.920    C
# 17 file3.csv     15.920    20.042    A
# 18 file3.csv     20.042    19.553    B

(我将第一个数据集抖动到文件 2 和 3 中。)

从这里开始,用 ggplot2 绘图并不太难:

library(ggplot2)
ggplot(alldat, aes(fill = char, color = char)) +
  geom_rect(aes(xmin = start.time, xmax = stop.time, ymin = -0.5, ymax = 0.5)) +
  geom_text(aes(x = pmin(start.time, (start.time+stop.time)/2),
                y = 0, label = char),
            hjust = -0.5, vjust = 0.5,
            inherit.aes = FALSE) +
  scale_x_continuous(name = "Time (min)") +
  facet_grid(dataset ~ .) +
  theme(axis.text.y=element_blank(),
        axis.ticks.y=element_blank() )

ggplot2 与 geom_rect

plot 可以通过细微调整窄带中的hjust= (水平对齐,即-0.5将字母向start.time值右侧移动半个字母)进行改进。 其他方面的改进主要由theme(..)解决,例如,删除背景中的 y 轴次要网格线,限制 x 轴扩展,图例的放置(或删除),所有这些都是标准的 ggplot2操作,并且应该足够容易研究和应用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM