我有一个要查询的数据集,并使用R转换为邻接矩阵。
示例数据集如下:
> track_df
track sound start end
1 track1A car 1000 2000
2 track1A person 1200 1500
3 track1A car 1500 1700
4 track1A dog 2300 3000
5 track1B cat 5000 8000
6 track1B car 5500 8500
7 track1B car 7500 10000
8 track1B person 8000 9000
9 track1C dog 1300 1600
10 track1C car 1500 1800
11 track1C person 1700 2000
该示例显示了录制在轨道上的声音以及每种声音的开始和结束时间。曲目包含多种声音。
产生示例的代码:
> track <- c('track1A', 'track1A', 'track1A', 'track1A', 'track1B', 'track1B', 'track1B', 'track1B', 'track1C', 'track1C', 'track1C')
> sound <- c('car', 'person', 'car', 'dog', 'cat', 'car', 'car', 'person', 'dog', 'car', 'person')
> start <- c(1000, 1200, 1500, 2300, 5000, 5500, 7500, 8000, 1300, 1500, 17000)
> end <- c(2000, 1500, 1700, 3000, 8000, 8500, 10000, 8000, 1300, 1500, 1700)
> end <- c(2000, 1500, 1700, 3000, 8000, 8500, 10000, 900, 1600, 1800, 2000)
> track_df <- data.frame(track, sound, start, end)
使用上面的数据集,我需要找到两种声音重叠/相交的次数(基于它们的开始和结束时间)。
如果声音在轨道中的另一声音期间开始或结束,则视为重叠。
所需的输出将是这样,我可以将其转变为热图或网络。
> matrix
car person dog cat
car 2 4 1 2
person 4 0 0 0
dog 1 0 0 0
cat 2 0 0 0
我不确定哪种方法最好,或者将初始数据集转换为易于迭代和比较的最佳方法。
也许我可以使用dplyr
和group_by
track,然后使用单独的函数创建summarise
以创建输出矩阵?我不确定我是否完全理解summarise
的工作原理,以及它是否会在track中的sounds的每个组合上进行迭代。
任何帮助将不胜感激。
我有一个要查询的数据集,并使用R转换为邻接矩阵。示例数据集如下:> track_df轨道声音起始端1 track1A汽车...
我只有一个非矢量化的解决方案,实际上确实做到了迭代track