2015-07-02 3 views
-2

Данные временных рядов данных четырех клиентов, Заказчика 1,2,3,4.Переформатирование временных рядов данных от широкоформатного до формата

names(data) 
"Date" "X1.CLIENT" "X1seasonal" "X1trend" "X1remainder" "X2.CLIENT" 
    "X2seasonal" "X2trend"  "X2remainder" "X3.CLIENT" "X3seasonal" 
"X3trend"  "X3remainder" "X4.CLIENT" "X4seasonal" "X4trend"  
"X4remainder" 

Обратите внимание, что за каждым данным Клиента следуют сезонные, трендовые и остаточные компоненты за тот же период времени.

Я хотел бы изменить в длинном формате в пути, который выглядит как

"Date" "CLIENT_Number" "Type" "Value" 

[Client_Number: 1,2,3,4; Тип: Клиент, сезонный, тренда, остаток]

(Дополнительная помощь для понимания: если данные (в широком формате) имеют 30 строк/экземпляров, то нам нужно преобразовать в длинный формат (30 * 4 * 4 = 480 строк/экземпляров .)

+0

Вы можете улучшить этот вопрос, показывая нам немного фактических данных и улучшая форматирование. Всегда проверяйте предварительный просмотр, чтобы увидеть, как будет выглядеть ваш вопрос, прежде чем закончить его. – Spacedman

+1

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что его просто тривиальный вопрос программирования R, так что должно быть на stackoverflow – Spacedman

+0

заглянуть в 'melt' в пакете' reshape2' – shadowtalker

ответ

0

Похоже, ваши данные неудобный повторяется широкоформатная Как ssdecontrol говорит, использование расплава от reshape2, я бы совместить с чем-то вроде lapply расколоть на разделы, например:.

# Set up 
install.packages("reshape2") 
library(reshape2) 

# Dummy data 
d = data.frame(date=seq.Date(as.Date("2015-01-01"), length.out=100, by=1), 
Client.1="A", trend.1=rnorm(100), remainder.1=rpois(10, 3), Client.2="B", 
trend.2=rnorm(100), remainder.2=rpois(10, 3), Client.3="C", trend.3=rnorm(100), 
remainder.3=rpois(10, 3)) 

# Split data by columns with client numbers 
d = lapply(c(2,5,8), function(i){ 
    # Take columns relating to client i 
    x = d[,c(1, seq(i, length.out=3, by=1))] 
    # Rename so you have consistent factor labels 
    names(x)[2:4] = c("client", "trend", "remainder") 
    # Conververt from wide to long 
    x = melt(x, id.vars=c("date", "client")) 
}) 

# Make list into a data frame 
d = do.call("rbind", d) 

Я нахожу этот пост действительно ясно о широком и длинном форматах: http://seananderson.ca/2013/10/19/reshape.html

Смежные вопросы