:
b[, intersect(a[, "name"],colnames(b))] ## the order is important here
例如,我與此數據進行測試。但是,如果您的文本文件看起來像您所顯示的數據,那麼這裏就是您的Perl解決方案。
我已經在空間上分割輸出。如有必要,可以非常簡單地進行更改。
use strict;
use warnings;
use autodie;
sub read_file {
my ($name) = @_;
open my $fh, '<', $name;
my @data = map [ split ], <$fh>;
\@data;
}
my $matrix_a = read_file('MatrixA.txt');
my @fields = map $matrix_a->[$_][0], 1 .. $#$matrix_a;
my $matrix_b = read_file('MatrixB.txt');
my @headers = @{$matrix_b->[0]};
my @indices = map {
my $label = $_;
grep $headers[$_] eq $label, 0..$#headers
} @fields;
for my $row (0 .. $#$matrix_b) {
print join(' ', map $matrix_b->[$row][$_], @indices), "\n";
}
輸出
a b c d
0.1 0.3 0.4 0.2
0.2 0.4 0.7 0.1
像這樣的事情? 'b [,a [,「name」]]' – Arun 2013-04-07 10:35:51
嗨@阿倫,非常感謝。我得到了一些輸出,但並不完全按照我希望的順序。我正在檢查a [,「name」]的輸出,並且列出名稱並添加'13500級別:a b ... z'。這可能是不正確分類名稱的原因嗎? – user1007742 2013-04-07 10:58:31
是的,只需要:'a [,「name」] < - as.character(a [,「name」])'執行之前提到的步驟。 – Arun 2013-04-07 11:02:48