r - 如何在第一个完整分钟之前删除秒数
问题描述
我目前有来自加速度计的逐秒数据,我需要按分钟平均(平均 60 秒)。问题是我在第一分钟和最后一分钟的开始和结束时都有数据,而不是整分钟。我想删除那些秒,所以当我按分钟平均时,它总是在分钟开始和停止。我的数据也是多个参与者堆叠在一起,所以我需要通过 id 来执行此操作。下面是我的数据布局方式的一个示例:
ID Timestamp
*1 2017-03-15 10:29:58
1 2017-03-15 10:29:59*
1 2017-03-15 10:30:00
1 2017-03-15 10:30:01
...
*1 2017-03-15 12:48:00*
*1 2017-03-15 12:48:01*
*1 2017-03-15 12:48:02*
*2 2017-04-01 11:19:59*
2 2017-03-15 11:20:00
等等
希望我能做到这一点,我可以消除每个 ID 的斜体行,这样我每个人只有整整几分钟的时间。(我每个数据帧大约有 80-95 个 ID)。这将允许我按整分钟汇总。
如果有一种更简单的方法来平均整分钟的值而不需要我删除行,那可能会更容易。
解决方案
既然你用 标记了这个lubridate
,这里有一个lubridate
/tidyverse
解决方案。(如果我正确理解了您的问题。)
library(tidyverse)
library(lubridate)
df <- tibble::tribble(
~id, ~timestamp,
1, "2017-03-15 10:29:58",
1, "2017-03-15 10:29:59",
1, "2017-03-15 10:30:00",
1, "2017-03-15 10:30:01",
1, "2017-03-15 12:48:00",
1, "2017-03-15 12:48:01",
1, "2017-03-15 12:48:02",
2, "2017-04-01 11:19:59",
2, "2017-03-15 11:20:00"
) %>%
mutate(
timestamp = as_datetime(timestamp),
x = rnorm(n()) # some var you want aggregate
)
如果您只想保留“整分钟”的观察结果,就像您所说的那样,那么在按分钟计算时使用相同的时间戳来保留观察结果。
df %>%
filter(timestamp == floor_date(timestamp, "minute"))
如果您没有与底时间戳完全匹配的观察结果,但您希望保留最接近“整分钟”的观察结果,那么您可以按时间戳排列它们,并将第一个观察值保留在每分钟内。
df %>%
arrange(timestamp) %>%
mutate(min = floor_date(timestamp, "minute")) %>%
group_by(min, id) %>%
slice(1) %>%
ungroup()
如果您想按分钟聚合某个变量 x,比如说,取平均值,然后按下限时间戳分组。
df %>%
mutate(min = floor_date(timestamp, "minute")) %>%
group_by(min, id) %>%
summarize(mean_var = mean(var)) %>%
ungroup()
推荐阅读
- sql - XMLELEMENT SQL 函数名是否允许冒号
- php - 用于查找和替换的 Linux 命令行不起作用
- jquery - 如何在特定页面上隐藏 Div
- python - 使用张量流 keras 模型的动态时期数
- laravel - 如何维护数据库中的总列
- azure - 从 Azure DataFactory 更新 SalesForce 中的字段
- matlab - 将 3D 阵列混合成更大的 3D 阵列
- web-services - 两个服务中的 JAX-RS 相同的 @Path 标识符
- java - Google Maps API 显示位置,但不居中
- java - 如何编程在java中找到数组中最大的2个数字和最小的2个数字