我目前正在处理一系列我导入MATLAB的.txt文件。为简单起见,我会在概念上展示我的问题。必须的,我是MATLAB(或一般编程)的新手。
这些.txt文件包含跟踪视频中ROI(逐帧)的数据,第一列中的时间('t')和秒中的速度('v'),如下所示;
T1 = T2 = etc.
t v t v
0 NaN 0 NaN
0.1 100 0.1 200
0.2 200 0.2 500
0.3 400 0.3 NaN
0.4 150
0.5 NaN
每个文件的时间列都相同,所以我想按照以下方式组织表中的数据;
time v1 v2 etc.
0 NaN NaN
0.1 100 200
0.2 200 500
0.3 400 NaN
0.4 150 0
0.5 NaN 0
请注意,我想在较短的试验结束时添加0(或NaN)以解决尺寸差异问题。
这两种解决方案都适用于我的数据集。我感谢所有的帮助!
答案 0 :(得分:2)
您可以使用readtable
将每个文件导入table
,然后使用outerjoin
以您期望的方式组合表格。如果所有数据都从t = 0
开始,那么这将有效。
从文件中创建table
:
T1 = readtable('filename1.dat');
T2 = readtable('filename2.dat');
然后执行outerjoin
(为演示目的而创建的伪数据)。
t1 = table((1:4)', (5:8)', 'VariableNames', {'t', 'v'});
%// t v
%// _ _
%// 1 5
%// 2 6
%// 3 7
%// 4 8
% t2 is missing row 2
t2 = table([1;3;4], [1;3;4], 'VariableNames', {'t', 'v'});
%// t v
%// _ _
%// 1 1
%// 3 3
%// 4 4
%// Now perform an outer join and merge the key column
t3 = outerjoin(t1, t2, 'Keys', 't', 'MergeKeys', true)
%// t v_t1 v_t2
%// _ ____ ____
%// 1 5 1
%// 2 6 NaN
%// 3 7 3
%// 4 8 4
答案 1 :(得分:1)
我建议使用padarray
和horzcat
函数。他们分别:
NaN
也可以)。首先,尝试获取必须连接的最长向量的长度。我们称这个值为max_len
。完成后,您可以通过执行以下操作来填充每个向量:
v1 = padarray(v1, max_len - length(v1), 0, 'post');
% You can replace the '0' by any value you want !
最后,一旦你有相同大小的向量,你可以使用horzcat
连接它们:
big_table = horzcat(v1, v2, ... , vn);