好的,以下是我希望使用高效、优雅的解决方案(如data.table或dplyr)来解决的问题。
定义:
DT = data.table(group=c(rep("A",3),rep("B",5)),value=c(2,9,2,3,4,1,0,3))
time group value
1: 1 A 2
2: 2 A 9
3: 3 A 2
4: 1 B 3
5: 2 B 4
6: 3 B 1
7: 4 B 0
8: 5 B 3
我想要的是按组累计求和的值,这些值在观察时根据其倒序排列进行除法。
time group value RESULT
1: 1 A 2 2.000000
2: 2 A 9 10.000000
3: 3 A 2 7.166667
4: 1 B 3 3.000000
5: 2 B 4 5.500000
6: 3 B 1 4.000000
7: 4 B 0 2.583333
8: 5 B 3 4.933333
在第5行,结果为:
4/1 + 3/2 = 5.5
。因为在时间2时,B组有2个观测值,最后一个被除以1,之前的被除以1。
接下来在第6行,结果为:1/1 + 4/2+ 3/3 = 4
。由于在时间3时,B组有3个观测值,最后一个被除以1,之前的被除以2,再之前的被除以3。在第7行:0/1 + 1/2 + 4/3 + 3/4 = 2.583333
,以此类推…
数据量很大,因此避免使用循环至关重要!
DT[, .SD]
与DT
是相同的,所以你这样做只是为了使括号对齐吗? - Frank