Transpondo dados em uma planilha

0

EDIT: Mostrar dados não é apenas numérico

Eu realmente apreciaria alguma ajuda, se possível, por favor! Eu tenho alguns dados em uma planilha do LibreOffice que é estruturada assim:

+----+---------+-------+--+
| ID | Quality | Value |  |
+----+---------+-------+--+
|  1 | Height  |   123 |  |
|  1 | Weight  |   456 |  |
|  1 | Name    |   Jon |  |
+----+---------+-------+--+

Mas eu preciso transpor os dados para mostrar assim:

+----+--------+--------+-------+
| ID | Height | Weight | Name  |
+----+--------+--------+-------+
|  1 |    123 |    456 |   Jon |
+----+--------+--------+-------+

É um arquivo longo - 85.000 linhas, senão eu faria isso manualmente! Eu tenho acesso ao LibreOffice, awk, sed e outras ferramentas do Linux. Se chegasse a isso, eu poderia encontrar uma maneira de usar o Excel.

Alguma ideia por favor? E transpõe a palavra certa?

Muito obrigado antecipadamente!

    
por M Harwood 29.03.2017 / 12:14

3 respostas

0

Isso pode ser facilmente alcançado usando Tabelas Dinâmicas.

Etapa 1: selecione os dados Etapa 2: vá para Dados > Tabela Dinâmica > Crio Etapa 3: Quando a Tabela Dinâmica é criada, arraste a ID para os "Campos de Linha", Valor para os "Campos de Dados" e Qualidade para os "Campos de Coluna". Em seguida, clique em OK

    
por 29.03.2017 / 12:29
0

Vou escrever a versão Excel da fórmula, você tem que tentar e convertê-la quando necessário para o 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),"")  

Em Altura coluna B Linha 2
[Initial Tab]!$C$2:$C$85000 Coluna de Valor
[initial Tab]!$A$2:$A$85000 Coluna ID
[Initial Tab]!$B$2:$B$85000 Coluna de Qualidade
Número de identificação A2 na nova guia
 Cabeçalho da coluna Altura B1 na nova guia
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),"")

Todas as fórmulas são fórmula de matriz, pressione Ctrl + Shift + Enter ao mesmo tempo em vez de Enter para cada fórmula e você pode arrastá-la para baixo na mesma coluna
Para cada Quality , basta substituir $ B $ 1 pela referência do cabeçalho de qualidade na nova guia
A fórmula retornará "" vazia se não houver qualidade para o ID correspondente. Basta copiar a coluna de ID para a nova guia e remover duplicatas dela

Novo separador

        Column A        Column B         Column C     Column D   
Row 1    ID              Height           Weight        Name  
Row 2    1               Formula 1        Formula 2     Formula 3
    
por 29.03.2017 / 14:25
0

Se você quiser carregar a planilha para um arquivo separado por vírgula e usar awk para transpor para outro arquivo e enviá-lo, isso pode funcionar para você.

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
    
por 04.05.2017 / 20:43