2012-03-30 11 views
7

diff() एक निर्दिष्ट अंतराल पर वेक्टर में मानों के बीच अंतर की गणना करता है। क्या कोई समकक्ष कार्य है जो दो वैक्टरों पर काम करता है? उदाहरण के लिए, मेरे पास है:एकाधिक कॉलम के लिए diff() के लिए प्रतिस्थापन

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

यह सिर के संयोजन (प्रयोग कर प्राप्त किया जा सकता है:

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

मैं यही कारण है कि हो सकता है और अंतराल 1. पर v1 के प्रत्येक मान वी 2 के बीच अंतर की गणना करनी है)/पूंछ() 2 वैक्टरों पर, लेकिन मैं सोच रहा था कि क्या पहले से ही एक ऐसा कार्य है जो ऐसा कर सकता है।

उत्तर

9

मुझे ऐसा करने के बारे में कोई आधारभूत कार्य नहीं है, लेकिन gsk3 ने बताया कि taRifx पैकेज में यह क्षमता है। मैं एक पैकेज बुला कुछ इस सरल करने के लिए के खिलाफ सलाह देंगे: आप कर सकता है:

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

या .Rprofile में भंडारण के लिए अपने स्वयं के समारोह लिखने

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

taRifx पैकेज में shift कमांड पर एक नज़र डालें।

library(taRifx) 
shift(v1)-v2 

आपको यह तय करना होगा कि आप अंतिम प्रविष्टि (चक्र v1 या बस इसे NA बनाते हैं) के साथ क्या करना चाहते हैं। shift में उन सभी संभावनाओं के विकल्प हैं, साथ ही अंतराल को 1 से अधिक कुछ बदलने के लिए विकल्प हैं।

2

आप एक XTS/चिड़ियाघर उपयोग कर रहे हैं मैट्रिक्स के रूप में

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

मैं एक XTS वस्तु का उपयोग कर रहा है, तो यह मैं वास्तव में क्या ढूंढ रहा था। मुझे किसी बिंदु पर एक एक्सटीएस अकसर किये गए सवाल लिखना होगा ... :) –

+1

@RobertKubrick: मुझे लगा, क्योंकि आप [xts] टैग के लिए शीर्ष प्रश्नकर्ता हैं। यदि आप एक एफएक्यू लिखने के बारे में गंभीर हैं, तो मुझे मदद करने में खुशी होगी। –

+0

जैसे ही मुझे कुछ अतिरिक्त समय मिलता है, मैं एक मसौदा तैयार करूंगा। मैं आपको व्यक्तिगत संदेश या ईमेल कैसे भेज सकता हूं? मुझे इस वेबसाइट पर कोई सीधी संपर्क जानकारी नहीं दिखाई दे रही है। –

2

embed समारोह स्थानांतरित कर दिया बनाएंगे वैक्टर: समय श्रृंखला वस्तु, बस लेग्ड श्रृंखला घटाना। यदि आप पहला कॉलम चुनते हैं तो यह अनछुआ लेकिन छोटा-से-एक-अंत-अंत वेक्टर होता है और दूसरा कॉलम स्थानांतरित और छोटा-से-शुरुआत-प्रारंभिक वेक्टर होता है।

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 
संबंधित मुद्दे