我有一个包含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
答案 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))
但这对于求和非常具体。