2012-03-30 24 views
7

diff(), belirtilen gecikme süresindeki bir vektördeki değerler arasındaki farkı hesaplar. İki vektörde çalışan eşdeğer bir işlev var mı? Örneğin, vardır:Birden fazla sütun için diff() ile değiştirme

(2 - 5), (3 - 4), (4 - 3)... 

Bu kafa kombinasyonları (kullanılarak elde edilebilir: bu olur

v1 = c(1, 2, 3, 4, 5, 3) 
v2 = c(5, 4, 3, 2, 1, 0) 

lag 1. her V1 değeri ile V2 arasındaki farkı hesaplamak gerekir 2 vektörde)/tails(), ama zaten aynı şeyi yapabilecek bir fonksiyon olup olmadığını merak ediyordum.

cevap

9

Bunu yapmak için bildiğim bir temel işlev yoktur, ancak gsk3'ün taRifx paketinin bu kabiliyete sahip olduğuna dikkat edin. Bir şey bu basit yapmak için bir paket olarak adlandırılmasına karşı tavsiye ediyorum:

v1[-1] - v2[-length(v2)] 

Ya

shift.diff <- function(x, y) x[-1] - y[-length(y)] 
shift.diff(v1, v2) 
4

taRifx paketindeki shift komutuna bakın.

library(taRifx) 
shift(v1)-v2 

Sen son girişi yapmak (bisiklet v1 veya sadece NA yapmak) istediğinize karar gerekecek. shift, tüm bu olasılıklar için seçeneklerin yanı sıra gecikmenin değiştirilmesi için seçeneklerin dışında bir seçeneğe sahiptir. 0

2

bir XTS/hayvanat bahçesi kullanıyorsanız .Rprofile depolama için kendi fonksiyonunu yazın: Sen yapabileceğini matris şeklinde

x <- .xts(cbind(v1,v2), 1:length(v1)) 
x$v1-lag(x$v2) 
+0

Xts nesnesi kullanıyorum, bu yüzden tam da aradığım şey buydu. Bir noktada xts SSS yazmam gerekecek ... :) –

+1

@RobertKubrick: [xts] etiketinin en üst sorgusu olduğun için düşündüm. Bir SSS yazmayla ilgili ciddi iseniz, size yardımcı olmaktan mutluluk duyarım. –

+0

Boş zamanınız dolduğunda bir taslak hazırlayacağım. Size kişisel bir mesaj veya e-posta gönderebilir miyim? Bu sitede doğrudan iletişim bilgilerini göremiyorum. –

2

embed fonksiyonu kaydırılır yaratacak vektörleri: zaman serisi nesne, sadece gecikmeli dizi çıkarılır. Eğer ilk sütunu seçerseniz, bu, kaymamış fakat kısaltılmış bir vektördür ve ikinci sütun ise, başlangıçta kaydırılmış ve kısaltılmış bir vektördür.

embed(v1,2)[,1] -embed(v2,2)[,2] 
#[1] -3 -1 1 3 2 

embed(v1, 2) 
    [,1] [,2] 
[1,] 2 1 
[2,] 3 2 
[3,] 4 3 
[4,] 5 4 
[5,] 3 5 
İlgili konular