基于两列的r中的累积和

时间:2014-09-02 19:56:11

标签: r

R newb;我试图在早期问题的基础上弄清楚这一点,但并没有取得任何成功。我的数据大致如下:

Name     Date        Value
A        2014-09-11  1.23
A        2014-12-11  4.56
A        2014-03-01  7.89
A        2014-06-05  0.12
B        2014-09-25  9.87
B        2014-12-21  6.54
B        2014-11-12  3.21

我希望在数据框上执行以下任务:添加一个索引列,用于计算列名称的累计出现次数(包含字符串,而不是因子)。对于每个"名称"用索引为k-1的元素替换给定Name的累积索引k或更大的所有元素。

因此,对于k = 4,结果将是:

Name     Date        Value
A        2014-09-11  1.23
A        2014-12-11  4.56
A        2014-03-01  7.89
A        2014-06-05  7.89
B        2014-09-25  9.87
B        2014-12-21  6.54
B        2014-11-12  3.21

有关如何在惯用R中执行此操作的任何提示;在框架上循环可能会有效,但是我试图按照预期的方式学会这样做,以便在旅途中获得一些R技能。

1 个答案:

答案 0 :(得分:4)

我认为你正在寻找这个:

require("data.table")

A = data.table(
Name = c("A","A","A","A","B","B","B"), 
Date = c("2014-09-11", "2014-12-11", "2014-03-01", "2014-06-05", "2014-09-25", "2014-12-21", "2014-11-12"), 
Value = c(1.23, 4.56, 7.89, 0.12, 9.87, 6.54,3.21))


A[,IX:=seq(1,.N),by="Name"]

enter image description here

编辑:(由于您更正了问题,我更新了答案。)

func = function(x,b){return(c(x[seq(1,b)],rep(x[b],length(x)-b)))}
k = 4
A[,Value:=func(Value,k-1),by="Name"]

enter image description here