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

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
ymr3R9Jge
Активный участник
Сообщения: 115
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

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

Сообщение ymr3R9Jge » 27 сен 2016, 18:29

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

nickleb
Гуру
Сообщения: 847
Зарегистрирован: 22 май 2010, 20:20
Репутация: 93

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

Сообщение nickleb » 27 сен 2016, 21:11

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

gamm
Гуру
Сообщения: 2733
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 605
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 28 сен 2016, 08:05

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

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

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

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

nickleb
Гуру
Сообщения: 847
Зарегистрирован: 22 май 2010, 20:20
Репутация: 93

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

Сообщение nickleb » 28 сен 2016, 10:55

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

ymr3R9Jge
Активный участник
Сообщения: 115
Зарегистрирован: 31 окт 2011, 00:18
Репутация: 13
Откуда: Кривий Ріг

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

Сообщение ymr3R9Jge » 28 сен 2016, 16:06

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

gamm
Гуру
Сообщения: 2733
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 605
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 29 сен 2016, 08:26

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

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

nickleb
Гуру
Сообщения: 847
Зарегистрирован: 22 май 2010, 20:20
Репутация: 93

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

Сообщение nickleb » 05 дек 2016, 21:38

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

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя