Saya memiliki beberapa puluh ribu pengamatan yang ada dalam rangkaian waktu tetapi dikelompokkan berdasarkan lokasi. Sebagai contoh:
location date observationA observationB
---------------------------------------
A 1-2010 22 12
A 2-2010 26 15
A 3-2010 45 16
A 4-2010 46 27
B 1-2010 167 48
B 2-2010 134 56
B 3-2010 201 53
B 4-2010 207 42
Saya ingin melihat apakah bulan x 's observationA
memiliki hubungan linier dengan bulan x +1 observationB
.
Saya melakukan riset dan menemukan zoo
fungsi, tetapi tampaknya tidak memiliki cara untuk membatasi kelambatan berdasarkan kelompok. Jadi jika saya menggunakan kebun binatang dan tertinggal observationB
1 baris, saya akan berakhir dengan lokasi A observationB
sebagai lokasi B yang pertama observationB
. Saya lebih suka memiliki yang pertama observationB
dari setiap lokasi menjadi NA
atau nilai yang jelas lainnya untuk menunjukkan "jangan sentuh baris ini".
Saya kira apa yang saya maksudkan adalah apakah ada cara bawaan untuk melakukan ini di R? Jika tidak, saya bayangkan saya bisa menyelesaikan ini dengan konstruksi loop standar. Atau apakah saya perlu memanipulasi data?
sumber
@ mpiktas Hanya untuk menyebutkan secara singkat dua kesalahan kecil dalam versi 3 jawaban Anda. Pertama, frasa "versi lebih cepat" jelas ditinggalkan karena kesalahan. Kedua, kata ": =" telah terlewat dalam kode. Memperbaiki yang terakhir memperbaiki yang pertama: =)
sumber
Daripada melewati semua langkah
tapply
dan langkah tambahan, inilah cara yang lebih cepat:sumber
Dengan dplyr
sumber
Anda mungkin ingin melihat
vars
paketnya. Kedengarannya seperti Vector Autoregression (VAR) adalah apa yang mungkin Anda coba lakukan.sumber
Dengan DataCombine:
Data juga perlu disortir. Gunakan
slideBy=-1
sebagai gantinya untuk keterlambatan.sumber