LINUX.ORG.RU

Трансформация таблицы

 


0

4

Доброй ночи.
Есть большая таблица, примерно вот такого вида

первый	второй	третий
25000	56000	66000
28750	64400	75900
30000	67200	79200
33750	75600	89100
26200	57200	67200

Есть ли какие средства трансформировать её в такой вид?

	
первый	25000
первый	28750
первый	30000
первый	33750
первый	26200
второй	56000
второй	64400
второй	67200
второй	75600
второй	57200
третий	66000
третий	75900
третий	79200
третий	89100
третий	67200

То есть нужно, чтобы числовые значения каждого столбца выстроились в один столбец, а заголовки столбцов в другой, дублируясь ровно столько раз сколько значений было в столбце в котором они были заголовком. Количество значений в столбцах исходной таблицы всегда одинаковое


#!/bin/bash

echo 'первый  второй  третий
25000   56000   66000
28750   64400   75900
30000   67200   79200
33750   75600   89100
26200   57200   67200' |
python -c '
import sys
def items(line):
  return filter(None, line.rstrip("\n").split(" "))
def f():
  h = items(sys.stdin.readline())
  for i, line in enumerate(sys.stdin):
    for j, item in enumerate(items(line)):
      yield j,i, h[j],item
for a,b, header,item in sorted(f()):
  print header, item
'
anonymous
()
Ответ на: комментарий от ptah_alexs

t() просто транспонирует таблицу или матрицу, а это не совсем то. Здесь нужно преобразовать таблицу из «широкого» в «длинный» формат. Для этого ранее использовалась функция melt() из пакета reshape2, а сейчас на смену этому пакету появился пакет tidyr, где для этой цели используется функция gather().

Interlace ★★
()

Если нужно сделать всего один раз, почему бы не сделать в LibreOffice Calc.

tlx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.