2011-08-29 116 views
3

我有一個有2列的表格,我想從第二列開始繪製值,對於當前行之前的5行中第一列的N值的總和作爲R中的數據轉換

如何在沒有外部預處理的情況下在R中實現這種轉換?

實施例:

文件:data.csv

7,2 
4,8 
3,6 
7,10 
9,3 
0,4 
8,9 
3,4 
5,3 
4,6 

d = read.csv("data.csv", col.names=c("a","b")) 
plot(??some_transform??(d$a), d$b) 

some_transform應產生下列柱:

7 = 7 
7+4 = 11 
7+4+3 = 14 
7+4+3+7 = 21 # Up to this is optional, can start with row 5 
7+4+3+7+9 = 30 
4+3+7+9+0 = 23 
3+7+9+0+8 = 27 
7+9+0+8+3 = 27 
9+0+8+3+5 = 25 
0+8+3+5+4 = 20 

所以,積輸入是

7,2 
11,8 
14,6 
21,10 
30,3 
23,4 
27,9 
27,4 
25,3 
20,6 
+0

「當前行之前5行中第一列的N個值」? –

+0

@DWin添加了一個示例。 –

回答

4

嵌入函數將組裝一個矩陣,其矢量的延遲增加。看一看:

embed(DF[ , ], 5) 

因此,如果這是爲了開始在第5行的工作,那麼你可以使用這些結果:

apply(embed(DF[ , 1], 5), 1,sum) 
plot(apply(embed(DF[ , 1], 5), 1,sum) , DF[-(1:4), 2]) 

編輯:隨着你的改變規格,添加4個零來嵌入論證的開始。我顯示使用的方法,使更容易「可視化」該擴展到嵌入第一個參數的結果的結果:

> embed(c(0,0,0,0, DF[ ,1 ]), 5) 
     [,1] [,2] [,3] [,4] [,5] 
[1,] 80 0 0 0 0 
[2,] 80 80 0 0 0 
[3,] 80 80 80 0 0 
[4,] 81 80 80 80 0 
[5,] 82 81 80 80 80 
[6,] 82 82 81 80 80 
[7,] 83 82 82 81 80 
[8,] 83 83 82 82 81 
[9,] 90 83 83 82 82 
[10,] 90 90 83 83 82 
[11,] 90 90 90 83 83 
[12,] 84 90 90 90 83 
[13,] 84 84 90 90 90 
[14,] 85 84 84 90 90 
[15,] 85 85 84 84 90 

(一般與嵌入(見上面進一步)一個得到縮短的陣列,但我們的提問者願意接受「導入」現象)。

apply(embed(c(0,0,0,0, DF[ ,1 ]), 5), 1,sum) 
plot(apply(embed(c(0,0,0,0, DF[ ,1 ]), 5), 1,sum), DF[, 2]) 
+0

+1對於嵌入,經常忽略(通過我)功能。 – joran

1

喲你可以沿第一列運行一個FIR濾波器來找到總和:

table = transform(table, sum5_a = filter(a, rep(1, 5), sides=1)) 

雖然這是相當具體的總結。