如何在R中模仿(…)上的行数()

如何在R中模仿(…)上的行数(),r,R,为了随时间处理/汇总数据,我通常在(分区依据…)上使用SQL ROW_NUMBER()。我是R新手,所以我正在尝试重新创建表,否则我会在SQL中创建表。包sqldf不允许OVER子句。示例表: ID Day Person Cost 1 1 A 50 2 1 B 25 3 2 A 30 4 3 B 75

为了随时间处理/汇总数据,我通常在(分区依据…)上使用SQL ROW_NUMBER()。我是R新手,所以我正在尝试重新创建表,否则我会在SQL中创建表。包sqldf不允许OVER子句。示例表:

ID   Day    Person    Cost
1     1        A        50     
2     1        B        25     
3     2        A        30     
4     3        B        75     
5     4        A        35     
6     4        B        100    
7     6        B        65     
8     7        A        20     
我希望我的最终表格包括前两个实例在第二个实例之后每天的平均值(两个实例的第4天):


我一直在尝试使用
聚合
,但我不确定如何划分或限定函数。理想情况下,我不希望使用
id
与日期顺序这一事实来形成我的答案(即原始表格可以按照随机日期顺序重新排列,代码仍然有效)。如果您需要更多详细信息,请告诉我,谢谢您的帮助

您可以使用宽度为2的滞后
zoo::rollappyr
。在dplyr中

库(dplyr)
df%>%安排(日)%>%排序
分组依据(人)%>%#设置分组
变异(Prev2=滞后(zoo::rollappyr(成本,宽度=2,乐趣=平均值,填充=NA)))
#>来源:本地数据帧[8 x 5]
#>组别:人[2]
#> 
#>ID日个人成本前2
#>       
#>1 A 50 NA
#>21B25NA
#>3 3 2 A 30 NA
#>43B75NA
#>5 5 4 A 35 40.0
#>6 4 B 100 50.0
#>7 6 B 65 87.5
#>8 8 7 A 20 32.5
或者全部在dplyr中

df%>%arrange(Day)%%>%group\u by(Person)%%>%mutate(Prev2=(滞后(成本)+滞后(成本,2))/2)
返回相同的东西。在基地,

df 1 A 50 NA
#>21B25NA
#>3 3 2 A 30 NA
#>43B75NA
#>5 5 4 A 35 40.0
#>6 4 B 100 50.0
#>7 6 B 65 87.5
#>8 8 7 A 20 32.5
或者没有动物园


df$Prev2感谢您的回复!我在不同的教程中使用过dplyr,但我从未在自己的“项目”中真正使用过它。进入的时间如果使用PostgreSQL后端,您可以使用sqldf。即使使用默认的SQLite后端,它也支持这一点(除非您使用的是旧版本的RSQLite包)。
ID   Day    Person    Cost     Prev2
5     4        A        35     40
6     4        B        100    50
7     6        B        65     90
8     7        A        20     35