R:移动 window 以提取数据帧的子集并将它们存储在数据帧列表中
R: Moving window to extract subsets of dataframe and store them in a list of dataframe
我有一个数据框,其中包含使用 GPS 项圈获得的动物的重新定位。项圈在动物身上戴了 43 天。我想通过移动 window 一天的步长来评估每周(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)
有没有无需手动创建每一行的简单方法?
我发现了几个关于拆分数据帧的问题,但它通常依赖于一个因子的唯一值。就我而言,每个提取的数据帧与其他数据帧有很多重叠。
感谢您的帮助
这里有一个使用 lapply 的快速方法:
lst <- lapply(1:(max(hodor$day) - 6), function(x) hodor[hodor$day %in% (x + 0:6), ])
我有一个数据框,其中包含使用 GPS 项圈获得的动物的重新定位。项圈在动物身上戴了 43 天。我想通过移动 window 一天的步长来评估每周(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)
有没有无需手动创建每一行的简单方法?
我发现了几个关于拆分数据帧的问题,但它通常依赖于一个因子的唯一值。就我而言,每个提取的数据帧与其他数据帧有很多重叠。
感谢您的帮助
这里有一个使用 lapply 的快速方法:
lst <- lapply(1:(max(hodor$day) - 6), function(x) hodor[hodor$day %in% (x + 0:6), ])