如何对加速度计秒级时序数据实现随机抽样(50取30)?
解决方案
核心思路是先把毫秒级的时间转换为秒级的分组标识,再基于这个标识分组抽样。以下分两种常见的时间格式给出具体实现:
情况1:time是POSIXct类型的日期时间
如果你的time是标准的日期时间格式(比如"2024-05-20 12:34:56.789"),可以用lubridate包的floor_date()函数将时间向下取整到秒,生成秒级分组列:
library(dplyr) library(lubridate) # 创建秒级分组列并抽样 df <- df %>% mutate(second_group = floor_date(time, unit = "second")) %>% group_by(second_group) %>% slice_sample(n = 30) %>% ungroup() # 可选:不需要分组列的话直接删除 df <- df %>% select(-second_group)
情况2:time是数值型的毫秒数
如果time是从某个起始点开始的毫秒计数(比如1716189296789),直接对数值取整到秒即可:
library(dplyr) df <- df %>% mutate(second_group = as.integer(time / 1000)) %>% group_by(second_group) %>% slice_sample(n = 30) %>% ungroup() %>% select(-second_group) # 可选删除分组列
注意事项
- 若存在某一秒的数据量不足30条的情况,可将
slice_sample(n=30)改为slice_sample(n = min(n(), 30)),避免因数据量不足报错。 - 未安装依赖包的话,先执行
install.packages(c("dplyr", "lubridate"))完成安装。
内容的提问来源于stack exchange,提问作者mto23
相关产品推荐
相关产品推荐

