Perl:合并具有相同名称的列并保留行名称

时间:2014-02-03 04:50:44

标签: perl rows multiple-columns names

我基本上想要做的就是选择一个这样的表,其中顶行包含列名:

A    B    B    B
a    9    8    9
a    6    5    3
b    4    4    5
b    8    3    4

并合并具有相同名称的列,同时保留相应的行名称(包含在第一列中),如下所示:

A    B
a    9
a    8
a    9
a    6
a    5
a    3
b    4
b    4
b    5
b    8
b    3
b    4

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

你要做的是'融化'一张桌子。我在R中使用了一个库,但在Perl中没有。有一个名为Data::Table的Perl模块,它具有多维列表的融合功能。

答案 1 :(得分:0)

您可以将初始表格(T1)可视化为:

0    1    2    3
A    B    B    B
a    9    8    9
...

你有列0 .. 3.每次打印转换表(T2)的行时,你将打印第0列。所以T1的第1行(“顶行”)将是以下第1行T2:

0    1

T1的第2行将是以下三行T2:

0    1
0    2
0    3

T1的每一行,从第2行到最后一行,将转换为三行T2 - 以上图所示的模式。

Psudocode:

  1. 获取一行T1
  2. 将该行拆分为其元素
  3. 是T1的第1行(“顶行”)吗?如果是,请使用换行符打印元素01。转到第1步。
  4. 这不是T1的第1行。打印以下内容,每个内容各自独立:元素01,元素02,元素03。< / LI>
  5. 转到第1步。
  6. 使用DATA读取文件或while时,如何获取当前行号? Perl使用$.来存储该信息。因此,如果$. == 1,则为第1行。

    希望这有帮助!