2011-04-04 17 views
6

चलें कहते हैं कि मैं निम्नलिखित संरचना के साथ एक डेटा फ्रेम है:आर: एक रोलिंग खिड़की से बाहर एक डेटा फ्रेम बनाने

DF <- data.frame(x = 0:4, y = 5:9) 
> DF 
    x y 
1 0 5 
2 1 6 
3 2 7 
4 3 8 
5 4 9 

क्या सबसे कारगर तरीका 'DF' के साथ एक डेटा फ्रेम में बदलने के लिए है निम्नलिखित संरचना:

w x y 
1 0 5 
1 1 6 
2 1 6 
2 2 7 
3 2 7 
3 3 8 
4 3 8 
4 4 9 

जहां डब्ल्यू डेटाफ्रेम 'डीएफ' के माध्यम से लम्बाई 2 खिड़की रोलिंग है। खिड़की की लंबाई मनमाने ढंग से किया जाना चाहिए, यानी एक 3 पैदावार

w x y 
1 0 5 
1 1 6 
1 2 7 
2 1 6 
2 2 7 
2 3 8 
3 2 7 
3 3 8 
3 4 9 

की लंबाई मैं कर रहा हूँ एक सा, इस समस्या से स्टम्प्ड क्योंकि डेटा फ्रेम भी स्तंभों की एक मनमाना संख्या, यानी डब्ल्यू, एक्स, वाई शामिल कर सकते हैं जेड आदि

/संपादन 2: मैंने महसूस किया गया है संपादित करें 1, थोड़ा अनुचित है के रूप में XTS डेटा बिंदु प्रति कई टिप्पणियों से निपटने के लिए

उत्तर

8

मेरे दृष्टिकोण embed फ़ंक्शन का उपयोग किया जाएगा प्रतीत नहीं होता । करने के लिए पहली बात यह है कि वेक्टर में सूचकांक का रोलिंग अनुक्रम बनाना है। डेटा-फ्रेम लें:

df <- data.frame(x = 0:4, y = 5:9) 

nr <- nrow(df) 
w <- 3   # window size 
i <- 1:nr   # indices of the rows 
iw <- embed(i,w)[, w:1] # matrix of rolling-window indices of length w 

> iw 
    [,1] [,2] [,3] 
[1,] 1 2 3 
[2,] 2 3 4 
[3,] 3 4 5 

wnum <- rep(1:nrow(iw),each=w) # window number 
inds <- i[c(t(iw))]    # the indices flattened, to use below 

dfw <- sapply(df, '[', inds) 
dfw <- transform(data.frame(dfw), w = wnum) 

> dfw 
    x y w 
1 0 5 1 
2 1 6 1 
3 2 7 1 
4 1 6 2 
5 2 7 2 
6 3 8 2 
7 2 7 3 
8 3 8 3 
9 4 9 3 
+0

+1 एम्बेड का बहुत अच्छा उपयोग() –

संबंधित मुद्दे