Привести в порядок таблицу
-
- Активный участник
- Сообщения: 117
- Зарегистрирован: 31 окт 2011, 00:18
- Репутация: 14
- Откуда: Кривий Ріг
Привести в порядок таблицу
Есть таблица следующего вида (скриншот). Это наблюдения Гидрометеоцентра за качеством воздуха в городе. Данные - закодированные значения "вещество+концентрация". Значения "ccccc" - это пустые значения в первичных данных, собственно пустые ячейки получились при перегонке первичных данных в R.
Проблема в том, что для некоторых постов наблюдения записываются в отдельные "субтаблицы" (если их можно так назвать). И в результате получаем - что, например пост №3 в 7:00 2 января 2014 года фигурирует в двух строках. Мне нужно привести эти данные в "длинную форму": номер поста, дата-время и столбец с закодированными значениями. Функция gather (пакет tidyr) ругается, поскольку при любой раскладке полей будут дублироваться значения в ключевых полях. Кто посоветует - как предварительно "причесать" таблицю для перегонки в "длинную форму"?
Проблема в том, что для некоторых постов наблюдения записываются в отдельные "субтаблицы" (если их можно так назвать). И в результате получаем - что, например пост №3 в 7:00 2 января 2014 года фигурирует в двух строках. Мне нужно привести эти данные в "длинную форму": номер поста, дата-время и столбец с закодированными значениями. Функция gather (пакет tidyr) ругается, поскольку при любой раскладке полей будут дублироваться значения в ключевых полях. Кто посоветует - как предварительно "причесать" таблицю для перегонки в "длинную форму"?
- Вложения
-
- Общий вид таблицы с данными
- Gidromet_table.png (22.84 КБ) 9473 просмотра
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Привести в порядок таблицу
- гляньте в сторону reshape:www.statmethods.net/management/reshape.htmlymr3R9Jge писал(а):- как предварительно "причесать" таблицю для перегонки в "длинную форму"?
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Привести в порядок таблицу
это не скриншот исходной таблицы (которая наверняка текстовая), а что-то, загруженное непонятно куда - лучше кусок исходных данных приложить.ymr3R9Jge писал(а):Есть таблица следующего вида (скриншот).
Формат у таких таблиц обычно позиционный (поля фиксированной ширины), можно просто грузить строки в R, указав разделителем что-то, чего нет в тексте (например, $)
Код: Выделить всё
read.table(...,as.is=TRUE,sep="$",quote="",comment.char="")
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Привести в порядок таблицу
а в подчеркнутых двух строках Вашего скриншота - пост №3 в 7:00 2 января 2014 года - столбец V1 - два - значения - в V1 - во второй строке - это, наверное, совсем другая переменная - отличная от переменной V1 в первой строке?... gamm прав... лучше кропотливо и тщательно организовать "чтиво" исходного файла, чем reshape-ить неверно контекстно изначально считанное...ymr3R9Jge писал(а):... в результате получаем - что, например пост №3 в 7:00 2 января 2014 года фигурирует в двух строках. Мне нужно привести эти данные в "длинную форму": номер поста, дата-время и столбец с закодированными значениями...
-
- Активный участник
- Сообщения: 117
- Зарегистрирован: 31 окт 2011, 00:18
- Репутация: 14
- Откуда: Кривий Ріг
Re: Привести в порядок таблицу
В принципе - функция melt из пакета reshape как раз подошла. По поводу первичных данных - gamm прав. Сами первичные данные хранятся в doc-файлах в виде текста. В прикреплённом файле пример первичных данных по посту №2. Длинные строки - большинство веществ-загрязнителей и метеопараметры. Внизу начинаются короткие строки. Там сведения о концентрациях формальдегида. Числа перед "ШШШ" - час отбора пробы. В принципе - распарсить не проблема. Я эти данные собственно и загружаю монолитной строкой. Перед загрузкой меняю пустые значения (обозначены двумя двоеточиями) на "ccccc". Зачем? Для удобства визуального контроля перед загрузкой в R, не более.
Самые первые пять цифр в каждой строке: номер поста (02), число месяца и количество веществ, описанных в этой строке. После знака "плюс" идёт описание метеопараметров. В принципе - в моём случае они не нужны, поскольку данные о погоде на метеостанции доступны отдельным массивом непосредственно средствами R (пакет stationaRy).
Самые первые пять цифр в каждой строке: номер поста (02), число месяца и количество веществ, описанных в этой строке. После знака "плюс" идёт описание метеопараметров. В принципе - в моём случае они не нужны, поскольку данные о погоде на метеостанции доступны отдельным массивом непосредственно средствами R (пакет stationaRy).
- Вложения
-
- PSZ2_2016-07.txt
- (6.94 КБ) 655 скачиваний
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Привести в порядок таблицу
я лет 10-15 назад много такого парсил на С++, пришел к выводу - поскольку в файлах периодически встречаются разные чудеса, лучше делать разбор самому, и все проверять и ругаться - иначе потом чудеса начинаются в расчетах.
Не доверяю я всем этим пакетам с автоматизацией ввода первичных данных
Не доверяю я всем этим пакетам с автоматизацией ввода первичных данных
-
- Гуру
- Сообщения: 964
- Зарегистрирован: 22 май 2010, 20:20
- Репутация: 154
Re: Привести в порядок таблицу
ёмкая полезная "шпаргалка" по пакетам dplyr и tidyr - для "мойдодыRов" данных :
https://www.rstudio.com/wp-content/uplo ... tsheet.pdf
https://www.rstudio.com/wp-content/uplo ... tsheet.pdf
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 19 гостей