R中的数据转换

时间:2011-08-29 03:13:36

标签: r

我有一个包含2列的表格,我想在第二列中绘制值,而在当前行之前的5行中第一列中的N值之和。

如何在没有外部预处理的情况下在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

2 个答案:

答案 0 :(得分: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

(通常使用embed(见上文)会得到一个缩短的数组,但我们的提问者愿意接受“引入”现象。)

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])

答案 1 :(得分:1)

您可以沿第一列运行FIR滤波器以查找总和:

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

但这对于求和非常具体。