我有两个数据集,原始具有每个变量的所有标签和描述,但第二个是该数据集的简化版本,用于特定实验,但没有任何有关变量的信息,包含在原始. 所以,我试图匹配两个数据集。
我的问题是,如果在两个矩阵维度上都进行了轻微的数据缩减,我如何才能找到原始数据集中的一行是否存在于新数据集中?
更具体地说,原始数据集是 24481 x 117 矩阵,新数据集是 24188 x 97 矩阵。但是,这里的问题是我不知道新数据集中包含或不包含哪些行或列
我有两个数据集,原始具有每个变量的所有标签和描述,但第二个是该数据集的简化版本,用于特定实验,但没有任何有关变量的信息,包含在原始. 所以,我试图匹配两个数据集。
我的问题是,如果在两个矩阵维度上都进行了轻微的数据缩减,我如何才能找到原始数据集中的一行是否存在于新数据集中?
更具体地说,原始数据集是 24481 x 117 矩阵,新数据集是 24188 x 97 矩阵。但是,这里的问题是我不知道新数据集中包含或不包含哪些行或列
您可以做的是用较少的元素对矩阵进行零填充,使其与原始数据的大小相匹配。然后使用
find(A==B)
A
并且B
是矩阵
使用intersect函数对我有用。由于在两个维度上都执行了数据缩减,首先我在矩阵中查找前两列向量的交集(假设至少在缩减中保留了列顺序)。
>> M = magic(5)
M =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> X = M([2,3,5], [1,2,4,5])
X =
23 5 14 16
4 6 20 22
11 18 2 9
>> [c,xi, mi]=intersect(X(:,1),M(:,1))
mi是简化矩阵 X 中存在的原始矩阵 M 中所有行的列索引向量。对矩阵中的前两行执行相同操作为我提供了从原始矩阵 M 中选择的所有列的行索引向量。
>> [c,xi, mi]=intersect(X(1,:),M(1,:))
该解决方案的一个缺点是,当原始矩阵的第一行或第一列未在新集合中选择时,您就可以从原始矩阵中移动比较向量的索引,幸运的是不会太多;)。
>> [c,xi, mi]=intersect(X(1,:),M(2,:))