2015-02-12 7 views
1

У меня есть базовое понимание R, которое в основном влечет за собой возможность запуска регрессионных и итоговых статистических данных, поэтому, если появятся какие-либо пробелы в моих знаниях, я был бы признателен за то, что вы указали в правильном направлении.Данные временных рядов в R

У меня есть данные временных рядов в формате CSV, который отформатирован следующим образом:

Facility ID, Utility Type, Account No, Unit Name, Date 1, Date 2, Date 3, Date 4 

Там будет несколько строк для конкретного номера счета, ссылающегося уникальный тип полезности и объекта (т.е. одна запись строка для имени единицы = L, одна запись строки для Unit Name = USD). В каждом столбце «дата» вводятся значения номера счета для определенного устройства в каждую дату. Я хотел бы написать сценарий, который позволяет мне реэкспортировать данные, где каждый столбец Date не содержит записей для нескольких единиц. Я также хотел бы обозначить R, чтобы столбцы Date отображали ежемесячные временные ряды данных, а оттуда проводили различные анализы временных рядов.

Я ценю вашу помощь в рассказе, как очистить эти данные.

В соответствии с просьбой, данные выборки:

Facility ID, Facility Name, State, Utility Type, Supplier, Account No., Unit Name, 7/1/14, 8/1/14 
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, USD, 42333, 41775 
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, ton-hr, 244278, 238035 
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, USD, 4860, 5890 
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, M^3, 7639, 8895 

Пример вывода:

Facility ID, Facility Name, State, Utility Type, Supplier, Account No., Quantity Consumed, Unit of Measure, Utility Bill, Currency, Date 
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, 244278, ton-hr, 42333, USD, 7/1/14 
4015, Palm Court Apts, CA, Chilled Water, PG&E, 87993, 238035, ton-hr, 41775, USD, 8/1/14 
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, 7639, M^3, 4860, USD, 7/1/14 
4044, 18 Sawtelle, CA, Natural Gas, Chevron, 17965, 8895, M^3, 5890, USD, 8/1/14 
+0

Вы должны попробовать 'help (unstack)' или посмотреть в пакет reshape2 для некоторых идей о том, как действовать. – vpipkt

+0

Можете ли вы показать некоторые данные образца в этих столбцах? И как вы хотите, чтобы результат выглядел? (Так что у нас есть воспроизводимый пример) – slhck

+0

Спасибо @slhck, я добавил несколько строк данных – milesaway

ответ

0
library(reshape2) 
d = read.csv("data.csv") 
d.molten = melt(d, 
    id.vars=c("Facility.ID", "Facility.Name", "State", "Utility.Type", "Supplier", "Account.No.", "Unit.Name"), 
    variable.name = "Date" 
) 

melt функция разбивает "широкий" формат (с неопределенным количеством столбцов) к «длинный» формат, где каждая строка является наблюдением. На самом деле это предпочтительный формат для большинства вещей, которые вы делали бы в R, по крайней мере при использовании packages from the "Hadleyverse". Специально для временных рядов.

Но мы еще не закончили. Теперь вы используете следующую структуру:

Facility.ID Facility.Name … Date value 
     4015 Palm Court Apts X7.1.14 42333 

Мы должны исправить даты, которые в настоящее время являются «строками». У них был «X», так как имена столбцов не могут начинаться с числа и не могут содержать пробелы.

d.molten$Date=as.Date(d.molten$Date, "X%m.%d.%y") 

Теперь ваши даты будут выглядеть правильно, и у вас есть одна строка для каждого наблюдения:

Facility.ID Facility.Name …  Date value 
     4015 Palm Court Apts 2014-07-01 42333 

И теперь мы можем легко построить временные ряды:

library(ggplot2) 
ggplot(d.molten, 
    aes(x = Date, y = value, color = Facility.Name)) + 
    geom_point() 

+0

очень полезно, спасибо! Еще один вопрос: что, если бы я хотел иметь все значения временных рядов, связанных с определенным номером учетной записи, при определенных данных в одной строке? Я выведу пример выше. – milesaway

+0

Ваш пример имеет только одно значение за дату, и ваш результат в основном такой же, как тот, который вы получаете, применяя команды в моем ответе, за исключением того, что столбец «значение» переименовывается в «Утилитный счет». «Все значения временного ряда [...] в той же строке« Вы имеете в виду добавление нового столбца для каждого значения, взятого в тот же день, с того же номера учетной записи? Разве это не будет ваш формат ввода снова? Я немного смущен ... – slhck

+0

Чтобы уточнить, в моем исходном формате; конкретная дата представляет собой заголовок столбца, где на выходе «Дата» становится заголовком столбца, а конкретные даты становятся значениями строк. Рассматривая формат ввода, каждое значение в строке с «USD» в качестве значения «Название единицы» имеет соответствующее количество потребляемого значения в другой строке с «ton-hr», «M^3» или «KWH» как значение «Unit Name». Если посмотреть на примерные входные данные на выходе, вы можете увидеть, что в одном примере для учетной записи 87993 потребляется 244278 тонно-часов стоимостью 42333 доллара США. На выходе это организовано в одну строку. Надеюсь, это поможет. – milesaway