R:移动窗口以提取数据帧的子集并将其存储在数据帧列表中

时间:2017-10-26 07:43:02

标签: r dataframe extract

我有一个数据框,其中包含使用GPS项圈获得的动物的重新定位。衣领在动物身上43天。我想评估每周(7天)家庭范围的变化,而不是通过移动窗口进行监测的总时间,步长为一天。

以下是我的数据框的第一行:

>head(hodor)
devil       date  time             Tfix fixid ttf Northing Easting alt Maxsnr Hdop sat qual  temp day
1 hodor 12/08/2015 14:00 2015/08/12 14:00    21  97       NA      NA   0      0  0.0   0   NO 34.25   1
2 hodor 12/08/2015 17:00 2015/08/12 17:00    22  97       NA      NA   0      0  0.0   0   NO 34.31   1
3 hodor 12/08/2015 18:00 2015/08/12 18:00    23  97       NA      NA   0      0  0.0   0   NO 30.37   1
4 hodor 12/08/2015 19:00 2015/08/12 19:00    24  74  5343138  598559  14     41  1.2   8   3D 21.31   1
5 hodor 12/08/2015 20:00 2015/08/12 20:00    25  39  5342985  598631  11     39  1.1  10   3D 30.50   1
6 hodor 12/08/2015 21:00 2015/08/12 21:00    26  39  5342202  598873   4     42  1.3   8   3D 20.25   1

完整数据集包含1052行,“date”列有43个级别 我创建了一个“day”列,其值为1到43,对应于“date”

的级别

这是我想要的结果:

df1 <- hodor[(hodor$day >= 1 & hodor$day <= 7),]
df2 <- hodor[(hodor$day >= 2 & hodor$day <= 8),]
df3 <- hodor[(hodor$day >= 3 & hodor$day <= 9),]
...
df37 <- hodor[(hodor$day >= 37 & hodor$day <= 43),]
lst <- list(df1, df2, df3, ... , df37)

如果不手动创建每一行,是否有一种简单的方法可以做到这一点?

我发现了几个关于拆分数据帧的问题,但它通常依赖于一个因子的唯一值。就我而言,每个提取的数据帧与其他数据帧有很多重叠。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这是一种用lapply做的快速方法:

lst <- lapply(1:(max(hodor$day) - 6), function(x) hodor[hodor$day %in% (x + 0:6), ])