2014-02-05 5 views
1

У меня есть ежеквартальные временные ряды экономических данных от IFF IFS, которые мне нужно получить в длинной форме.Изменение временных рядов данных в R

Прямо сейчас, строки являются переменными в стране, а столбцы - временем, поэтому это выглядит примерно так.

 country variable Q1 Q2 
[1,] "USA" "inflation" "1" "5" 
[2,] "USA" "GDPPC"  "2" "6" 
[3,] "UK" "inflation" "3" "7" 
[4,] "UK" "GDPPC"  "4" "8" 

мне нужно, чтобы получить его в длинной форме:

country Time inflation GDPPC 
[1,] "USA" "Q1" "1"   "2" 
[2,] "USA" "Q2" "5"   "6" 
[3,] "UK" "Q1" "3"   "4" 
[4,] "UK" "Q2" "7"   "8" 

Я не смог найти какие-либо рекомендации по использованию перекроить, когда переменная ID и измеряемые переменные находятся в строках.

ответ

1

Это частичное melt с последующим dcast в reshape2 пакете:

d = data.table(country = c("USA","USA","UK","UK"), variable = c("inflation","GDPPC","inflation","GDPPC"),Q1=as.character(1:4),Q2=as.character(5:8)) 
require(reshape2) 
d2 = melt(d, id=c("country", "variable")) 
colnames(d2)[3] = "Time" 
rr=dcast(d2, country +Time ~ variable) 
rr = rr[order(rr$country,decreasing=T),c(1:2,4,3)] 

Дает: Метод

> rr 
    country Time inflation GDPPC 
3  USA Q1   1  2 
4  USA Q2   5  6 
1  UK Q1   3  4 
2  UK Q2   7  8 
0

Основание R с помощью stack и reshape, используя ниже data.frame

d <- data.frame(country = c("USA","USA","UK","UK"), variable = c("inflation","GDPPC","inflation","GDPPC"),Q1=1:4,Q2=5:8) 

Редактировать:

intm <- data.frame(d[,c("country","variable")],stack(d[,c("Q1","Q2")])) 
reshape(intm, idvar=c("country","ind"), timevar="variable", direction="wide") 

# country ind values.inflation values.GDPPC 
#1  USA Q1    1   2 
#3  UK Q1    3   4 
#5  USA Q2    5   6 
#7  UK Q2    7   8 
Смежные вопросы