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技能。
答案 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"]
编辑:(由于您更正了问题,我更新了答案。)
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"]