Saya ingin dapat menambahkan perbedaan dan persen perubahan ke setiap kolom dalam kerangka data.
Saya dapat menggabungkan data dan melakukan penghitungan, namun saya tidak tahu cara menyatukan atau membentuknya kembali. Saya juga curiga bahwa hal ini mudah dilakukan dengan plyr, tetapi baris n-1 yang dikembalikan oleh diff()
memberi saya masalah.
Menggunakan kumpulan data yang disertakan:
library(plyr)
library(quantmod)
head(longley)
GNP.deflator GNP Unemployed Armed.Forces Population Year Employed
1947 83.0 234.289 235.6 159.0 107.608 1947 60.323
1948 88.5 259.426 232.5 145.6 108.632 1948 61.122
1949 88.2 258.054 368.2 161.6 109.773 1949 60.171
1950 89.5 284.599 335.1 165.0 110.929 1950 61.187
1951 96.2 328.975 209.9 309.9 112.075 1951 63.221
1952 98.1 346.999 193.2 359.4 113.270 1952 63.639
longley.m <- melt(longley, id="Year")
longley.m <- ddply(longley.m, .(variable), transform, valdiff=diff(c(NA, value)), valdelt=Delt(value))
head(longley.m)
Year variable value valdiff Delt.1.arithmetic
1 1947 GNP.deflator 83.0 NA NA
2 1948 GNP.deflator 88.5 5.5 0.066265060
3 1949 GNP.deflator 88.2 -0.3 -0.003389831
4 1950 GNP.deflator 89.5 1.3 0.014739229
5 1951 GNP.deflator 96.2 6.7 0.074860335
6 1952 GNP.deflator 98.1 1.9 0.019750520
(Saya tidak tahu mengapa Delt membuat nama kolomnya sendiri, tapi saya sudah menyerah)
Sekarang, saya dapat cast(longley.m, Year ~ variable)
kembali ke dataset asli, tetapi saya ingin dapat mengetahui selisih dan persentase perubahan untuk setiap variabel di kolom yang berbeda tanpa melakukan penghitungan secara manual pada setiap variabel lalu mengikatnya kembali. Saya cukup yakin saya telah mencoba setiap variasi pemeran tetapi tidak berhasil...
Pembaruan: Joran memecahkan masalah penamaan kolom Delt: memaksanya dengan as.vector!