我有一个表格形式的大数据:
Filename A B
xxxxx 1 2
xxxxx 3 4
xxxxx 5 5
xxxxx 6 .
xxxxx . .
yyyyy . .
yyyyy
yyyyy
yyyyy
zzzzz
zzzzz
我需要扫描第一列的所有行(大约 10,000 行),看看文件名在哪里更改,并为每个唯一的文件名创建一个标签。这样,我将使用生成的标签创建另一列.
file filename A B
1 xxxxx
xxxxx
xxxxx
2 yyyyy
yyyyy
yyyyy
3 zzzzz
zzzzz
我还需要在 A 列中找到每个唯一文件(文件 1、文件 2...)的最大值。任何建议将不胜感激。谢谢
我将从一个示例表开始,如您的示例所示:
T =
Filename A B
________ __ _
'xxxxx' 4 4
'xxxxx' 6 2
'xxxxx' 1 8
'xxxxx' 1 4
'xxxxx' 6 6
'yyyyy' 8 2
'yyyyy' 10 7
'yyyyy' 2 3
'yyyyy' 6 7
'zzzzz' 5 7
'zzzzz' 1 8
我们可以提取文件名的第一列,并使用函数unique
为每个唯一文件创建一组索引(即标签)。然后,我们可以从这个标签向量创建一个表,并将其与我们现有的表连接起来:
[~, ~, index] = unique(T.Filename, 'stable');
T = [table(index, 'VariableNames', {'Label'}) T];
T =
Label Filename A B
_____ ________ __ _
1 'xxxxx' 4 4
1 'xxxxx' 6 2
1 'xxxxx' 1 8
1 'xxxxx' 1 4
1 'xxxxx' 6 6
2 'yyyyy' 8 2
2 'yyyyy' 10 7
2 'yyyyy' 2 3
2 'yyyyy' 6 7
3 'zzzzz' 5 7
3 'zzzzz' 1 8
然后,我们可以将此标签向量与accumarray
一起使用,以收集每个唯一文件的列A
最大值:
maxVals = accumarray(T.Label, T.A, [], @max)
maxVals =
6 % For file 1
10 % For file 2
5 % For file 3