在电子表格中转置数据

在电子表格中转置数据

编辑:显示数据不仅仅是数字

如果可以的话,我将非常感激您的帮助!我在 LibreOffice 电子表格中有一些数据,其结构如下:

+----+---------+-------+--+
| ID | 质量 | 值 | |
+----+---------+-------+--+
| 1 | 高度 | 123 | |
| 1 | 重量 | 456 | |
| 1 | 姓名 | 乔恩 | |
+----+---------+-------+--+

但我需要转置数据以显示如下内容:

+----+--------+--------+-------+
| 身份证 | 身高 | 体重 | 名字 |
+----+--------+--------+-------+
| 1 | 123 | 456 | 乔恩|
+----+--------+--------+-------+

这是一个很长的文件 - 85,000 行,否则我只能手动操作!我可以使用 LibreOffice、awk、sed 和任何其他 Linux 工具。如果真的需要,我可以找到使用 Excel 的方法。

有什么想法吗?转置是正确的词吗?

提前谢谢了!

答案1

这可以通过使用数据透视表轻松实现。

步骤 1:选择数据步骤 2:转到数据 > 数据透视表 > 创建步骤 3:创建数据透视表后,将 ID 拖到“行字段”,将值拖到“数据字段”,将质量拖到“列字段”。然后单击“确定”

答案2

我将写出 Excel 版本的公式,您必须尝试一下,并在需要时将其转换为 LibreOffice:
Formula 1

=IFERROR(INDEX([Initial Tab]!$C$2:$C$85000,MATCH(A2&$B$1,[initial Tab]!$A$2:$A$85000&[Initial Tab]!$B$2:$B$85000,0),1),"")  

在高度列 B 下第 2 行
[Initial Tab]!$C$2:$C$85000 的值列
[initial Tab]!$A$2:$A$85000 ID 列
[Initial Tab]!$B$2:$B$85000 质量列
A2 新选项卡中的 ID 号
B1 新选项卡中的高度列标题
Formula 2

=IFERROR(INDEX([Initial Tab]!$C$2:$C$85000,MATCH(A2&$C$1,[initial Tab]!$A$2:$A$85000&[Initial Tab]!$B$2:$B$85000,0),1),"")   

Formula 3

=IFERROR(INDEX([Initial Tab]!$C$2:$C$85000,MATCH(A2&$D$1,[initial Tab]!$A$2:$A$85000&[Initial Tab]!$B$2:$B$85000,0),1),"")

所有公式都是数组公式,同时按下Ctrl+ Shift+而不是针对每个公式,然后将其拖到同一列中, 对于每个公式,只需将 $B$1 替换为新选项卡中质量标题的引用, 如果相应 ID 没有质量,公式将返回“”空, 只需将 ID 列复制到新选项卡并从中删除重复项 EnterEnter
Quality

新标签

        Column A        Column B         Column C     Column D   
Row 1    ID              Height           Weight        Name  
Row 2    1               Formula 1        Formula 2     Formula 3

答案3

如果您想将电子表格下载到以逗号分隔的文件中,然后将awk其转置到另一个文件,然后上传,这可能适合您。

awk -F, 'BEGIN { s = "," } {
if ( NR == 1 || NR == 2 || NR == 3 || NR == 4 ) {
    if ( NR == 1 ) h[1] = $1
    if ( NR == 2 ) { id = $1; h[2] = s $2; v[1] = $3 }
    if ( NR == 3 ) { h[3] = s $2; v[2] = $3 }
    if ( NR == 4 ) { print h[1] h[2] h[3] s $2; v[3] = $3 }
    }
else {
    if ($1 != id ) {
        print id s v[1] s v[2] s v[3]
        id = $1; v[1] = $3; ix = 2
        }
    else v[ix++] = $3
    }
}
END { print id s v[1] s v[2] s v[3]
}' file1 > file2

   File1                  File2
ID,Quality,Value       ID,Height,Weight,Name
1,Height,123           1,123,456,Jon
1,Weight,456           2,114,115,Cat
1,Name,Jon             3,224,225,Dog
2,Height,114
2,Weight,115
2,Name,Cat
3,Height,224
3,Weight,225
3,Name,Dog

相关内容