Transpondo dados em uma planilha

0

EDIT: Para mostrar dados não é apenas numérica

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

+ ---- + --------- + ------- + - +
| ID | Qualidade | Valor | |
+ ---- + --------- + ------- + - +
| 1 | Altura | 123 | |
| 1 | Peso | 456 | |
| 1 | Nome | Jon | |
+ ---- + --------- + ------- + - +

Mas preciso transpor os dados para mostrar assim:

+ ---- + -------- + -------- + ------- +
| ID | Altura | Peso | Nome |
+ ---- + -------- + -------- + ------- +
| 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 chegou a isso, eu poderia encontrar uma maneira de usar o Excel.

Alguma idéia por favor? E é transpor a palavra certa?

Muito obrigado antecipadamente!

M Harwood
fonte
"Transpor" é "espelho na diagonal". Então, isso não é exatamente o que você tem que fazer. Como olha as outras linhas? Existem vários ID's? Existem qualidades diferentes?
IQV
A sequência das suas linhas é sempre a mesma na coluna de qualidade (Altura, Peso, Profundidade, Altura, Peso, Profundidade ...)?
yass
Você pode usar Index / Matchcom o Excel apenas uma fórmula para cada coluna e você pode arrastá-lo
yass
Obrigado pelas respostas! Há muitas qualidades diferentes e nem todas as identidades têm as mesmas qualidades listadas. Eu vou olhar para Index / Match, obrigado.
M Harwood

Respostas:

0

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

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

Firee
fonte
Obrigado Firee! Eu, no entanto, cometi um erro ao não mencionar que os campos de dados contêm texto e números, portanto, as células de texto não parecem estar trabalhando com uma tabela dinâmica?
M Harwood
0

Vou escrever a versão Excel da fórmula, você tem que experimentá-la 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 Valor Coluna
[initial Tab]!$A$2:$A$85000 ID Coluna
[Initial Tab]!$B$2:$B$85000 Qualidade Coluna
A2 Número de ID na nova guia
B1 Coluna de altura Cabeçalho 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+ Enterao mesmo tempo em vez de Enterpara cada fórmula e você pode arrastá-la para baixo na mesma coluna
Para cada Qualityapenas substituir $ B $ 1 com a referência da qualidade Cabeçalho na nova guia
A fórmula retornará "" vazio se não houver qualidade para o ID correspondente
Basta copiar a coluna de ID para a nova guia e remover duplicatas dela

Nova aba

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

Se você quiser baixar a planilha para um arquivo separado por vírgula e usá-la awkpara transpor para outro arquivo e, em seguida, carregá-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
bstipe
fonte