Hitung anomali deret waktu dengan data yang dikelompokkan

Postingan perhitungan anomali pada deret waktu sangat membantu tetapi saya telah mengelompokkannya data dalam situasi saya. Saya memiliki bingkai data dengan tahun, grup, dan nilai serta kolom. Setiap kelompok memiliki nilai untuk setiap tahunnya. Yang ingin saya hitung adalah anomali tahunan di setiap kelompok. yaitu nilai tahun ini dikurangi nilai rata-rata sepanjang tahun untuk kelompok tersebut. Sebaiknya tambahkan nilai anomali ini sebagai kolom di bingkai data juga. Terima kasih! Berikut adalah contoh datanya

year <- c(2000, 2000, 2000, 2000, 2000,2001, 2001, 2001, 2001, 2001,2002, 2002, 2002, 2002, 2002,2003, 2003, 2003, 2003, 2003)
group <- c("A", "B", "C", "D", "A", "B", "C", "D","A", "B", "C", "D","A", "B", "C", "D","A", "B", "C", "D")
value <- runif(20, 0, 1)
df <- as.data.frame(year)
df$group <- group
df$value <- value

person wraymond    schedule 04.02.2016    source sumber
comment
tolong tunjukkan masalah Anda dengan contoh dataset beserta hasil yang diinginkan   -  person mtoto    schedule 04.02.2016


Jawaban (1)


Contoh lain di mana fungsi ave berguna (dan dengan demikian argumen FUN sebenarnya tidak diperlukan tetapi penting untuk diingat bahwa argumen tersebut terletak setelah elipsis dalam daftar argumen dan oleh karena itu perlu berupa argumen bernama jika digunakan):

df$grp.means <-with( df, ave(value,group, FUN=mean )
df$yr.anomaly <- df$value-df$grp.means
df
 year group      value grp.means   yr.anomaly
 2000     A 0.40778676 0.4135109 -0.005724164
 2000     B 0.02709893 0.2660400 -0.238941031
 2000     C 0.30375035 0.6461923 -0.342441950
 2000     D 0.46330590 0.4901705 -0.026864586
 2000     A 0.98482498 0.4135109  0.571314056
 2001     B 0.02279144 0.2660400 -0.243248519
 2001     C 0.64370031 0.6461923 -0.002491994
 2001     D 0.28803650 0.4901705 -0.202133986
 2001     A 0.40769648 0.4135109 -0.005814443
 2001     B 0.21896143 0.2660400 -0.047078526
 2002     C 0.83771796 0.6461923  0.191525655
 2002     D 0.61869987 0.4901705  0.128529384
 2002     A 0.06946549 0.4135109 -0.344045431
 2002     B 0.14443442 0.2660400 -0.121605537
 2002     C 0.95324165 0.6461923  0.307049349
 2003     D 0.60165466 0.4901705  0.111484174
 2003     A 0.19778091 0.4135109 -0.215730018
 2003     B 0.91691357 0.2660400  0.650873612
 2003     C 0.49255124 0.6461923 -0.153641061
 2003     D 0.47915550 0.4901705 -0.011014985

Juga dimungkinkan untuk melakukannya dalam satu langkah:

df$yr.anomaly <- with( df, ave(value, group, FUN=function(x) x- mean(x)))
person IRTFM    schedule 04.02.2016
comment
Terima kasih manis! Saya curiga ave() akan terlibat - person wraymond; 04.02.2016