Страница 1 из 1

Привести в порядок таблицу

Добавлено: 27 сен 2016, 18:29
ymr3R9Jge
Есть таблица следующего вида (скриншот). Это наблюдения Гидрометеоцентра за качеством воздуха в городе. Данные - закодированные значения "вещество+концентрация". Значения "ccccc" - это пустые значения в первичных данных, собственно пустые ячейки получились при перегонке первичных данных в R.
Проблема в том, что для некоторых постов наблюдения записываются в отдельные "субтаблицы" (если их можно так назвать). И в результате получаем - что, например пост №3 в 7:00 2 января 2014 года фигурирует в двух строках. Мне нужно привести эти данные в "длинную форму": номер поста, дата-время и столбец с закодированными значениями. Функция gather (пакет tidyr) ругается, поскольку при любой раскладке полей будут дублироваться значения в ключевых полях. Кто посоветует - как предварительно "причесать" таблицю для перегонки в "длинную форму"?

Re: Привести в порядок таблицу

Добавлено: 27 сен 2016, 21:11
nickleb
ymr3R9Jge писал(а):- как предварительно "причесать" таблицю для перегонки в "длинную форму"?
- гляньте в сторону reshape:www.statmethods.net/management/reshape.html

Re: Привести в порядок таблицу

Добавлено: 28 сен 2016, 08:05
gamm
ymr3R9Jge писал(а):Есть таблица следующего вида (скриншот).
это не скриншот исходной таблицы (которая наверняка текстовая), а что-то, загруженное непонятно куда - лучше кусок исходных данных приложить.

Формат у таких таблиц обычно позиционный (поля фиксированной ширины), можно просто грузить строки в R, указав разделителем что-то, чего нет в тексте (например, $)

Код: Выделить всё

read.table(...,as.is=TRUE,sep="$",quote="",comment.char="")
, и парсить самостоятельно каждую текстовую строку, за часок управитесь, как показывает опыт.

Re: Привести в порядок таблицу

Добавлено: 28 сен 2016, 10:55
nickleb
ymr3R9Jge писал(а):... в результате получаем - что, например пост №3 в 7:00 2 января 2014 года фигурирует в двух строках. Мне нужно привести эти данные в "длинную форму": номер поста, дата-время и столбец с закодированными значениями...
а в подчеркнутых двух строках Вашего скриншота - пост №3 в 7:00 2 января 2014 года - столбец V1 - два - значения - в V1 - во второй строке - это, наверное, совсем другая переменная - отличная от переменной V1 в первой строке?... gamm прав... лучше кропотливо и тщательно организовать "чтиво" исходного файла, чем reshape-ить неверно контекстно изначально считанное...

Re: Привести в порядок таблицу

Добавлено: 28 сен 2016, 16:06
ymr3R9Jge
В принципе - функция melt из пакета reshape как раз подошла. По поводу первичных данных - gamm прав. Сами первичные данные хранятся в doc-файлах в виде текста. В прикреплённом файле пример первичных данных по посту №2. Длинные строки - большинство веществ-загрязнителей и метеопараметры. Внизу начинаются короткие строки. Там сведения о концентрациях формальдегида. Числа перед "ШШШ" - час отбора пробы. В принципе - распарсить не проблема. Я эти данные собственно и загружаю монолитной строкой. Перед загрузкой меняю пустые значения (обозначены двумя двоеточиями) на "ccccc". Зачем? Для удобства визуального контроля перед загрузкой в R, не более.
Самые первые пять цифр в каждой строке: номер поста (02), число месяца и количество веществ, описанных в этой строке. После знака "плюс" идёт описание метеопараметров. В принципе - в моём случае они не нужны, поскольку данные о погоде на метеостанции доступны отдельным массивом непосредственно средствами R (пакет stationaRy).

Re: Привести в порядок таблицу

Добавлено: 29 сен 2016, 08:26
gamm
я лет 10-15 назад много такого парсил на С++, пришел к выводу - поскольку в файлах периодически встречаются разные чудеса, лучше делать разбор самому, и все проверять и ругаться - иначе потом чудеса начинаются в расчетах.

Не доверяю я всем этим пакетам с автоматизацией ввода первичных данных :-)

Re: Привести в порядок таблицу

Добавлено: 05 дек 2016, 21:38
nickleb
ёмкая полезная "шпаргалка" по пакетам dplyr и tidyr - для "мойдодыRов" данных :) :
https://www.rstudio.com/wp-content/uplo ... tsheet.pdf