R:如果值满足特定条件,如何将数据帧转换为邻接矩阵?

问题描述 投票:0回答:1

我有一个要查询的数据集,并使用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

我不确定哪种方法最好,或者将初始数据集转换为易于迭代和比较的最佳方法。

也许我可以使用dplyrgroup_by track,然后使用单独的函数创建summarise以创建输出矩阵?我不确定我是否完全理解summarise的工作原理,以及它是否会在track中的sounds的每个组合上进行迭代。

任何帮助将不胜感激。

我有一个要查询的数据集,并使用R转换为邻接矩阵。示例数据集如下:> track_df轨道声音起始端1 track1A汽车...

r matrix transformation adjacency-matrix
1个回答
0
投票

我只有一个非矢量化的解决方案,实际上确实做到了迭代track

© www.soinside.com 2019 - 2024. All rights reserved.