2011-08-29 125 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)) 

虽然这是相当具体的总结。