РЕДАКТИРОВАТЬ: чтобы показать данные не просто числовые

Я был бы очень признателен за помощь, если это возможно, пожалуйста! У меня есть некоторые данные в электронной таблице LibreOffice, которая имеет следующую структуру:

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

Но мне нужно транспонировать данные, чтобы показать так:

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

Это длинный файл - 85 000 строк, иначе я бы просто сделал это вручную! У меня есть доступ к LibreOffice, awk, sed и любым другим инструментам Linux. Если бы дело дошло до этого, я мог бы найти способ использовать Excel.

Есть идеи, пожалуйста? И правильно ли переносить слово?

Спасибо заранее!

3 ответа3

0

Это может быть легко достигнуто с помощью сводных таблиц.

Шаг 1. Выберите данные. Шаг 2. Перейдите в Данные> Сводная таблица> Создать. Шаг 3. После создания сводной таблицы перетащите идентификатор в "Поля строк", Значение в "Поля данных" и Качество в "Столбец". Поля». Затем нажмите ОК

0

Я напишу версию формулы для 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 в новой вкладке
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 + Enter вместо Enter для каждой формулы, и вы можете перетащить ее вниз в тот же столбец
Для каждого Quality просто замените $ B $ 1 ссылкой на заголовок качества в новой вкладке.
Формула вернет "" пусто, если нет качества для соответствующего идентификатора
Просто скопируйте столбец ID на новую вкладку и удалите из него дубликаты

Новая вкладка

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

Если вы хотите загрузить электронную таблицу в файл, разделенный запятыми, и использовать 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .