在R中每2分钟采样带时间戳的数据

时间:2013-01-16 15:10:18

标签: r

我有一些lat / long数据,当GPS装置打开时,每10秒收集一次。这些坐标显然是带时间戳的。这对于我的目的而言是太多的数据(30K加上观察),所以我希望每隔2分钟留下一个包含数据的数据帧。我怎么会在R?

我在下面创建了一个示例数据框。日期和时间被整合到一列中,我希望通过该列对我的数据进行采样。

a <-c(1:21)
D <- c("2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14", "2012/12/14")
Time <- c("18:40:37", "18:40:48", "18:40:58", "18:41:08","18:41:18","18:41:28","18:41:38","18:41:48","18:41:58","18:42:08","18:42:18","18:42:28","18:42:38","18:42:48","18:42:58","18:43:08","18:43:18","18:42:28", "18:44:18", "18:44:28", "18:44:28")
df1 <- data.frame(a, D, Time)

df1 <- within(df1, { timestamp=format(as.POSIXct(paste(D, Time)), "%d/%m/%Y %H:%M:%S") })   

这些单位可以全天开启和关闭,因此可能与录制的秒数没有任何一致性。

在R中执行此操作的最佳方式是什么?

非常感谢, 凯蒂

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是这样的:

df1[seq(to=nrow(df1), by=12),]

这意味着“从第一行开始每隔12行”。在关闭设备的情况下,它可能会略微不理想,但除非这种情况经常发生并且非常快速地连续发生,否则不应该太重要。

我的第一个建议如下:

df1[(1:floor(nrow(df1)/12))*12,]

它几乎完全相同,但从第12行而不是第1行开始。1:n是从1n的整数范围。所以在这种情况下,我构建一个所有整数的范围,最大整数不大于行数除以12.然后将所有这些数乘以12.这个版本不如上面那么明确,但是第一个我脑子里想到的东西,虽然知道可能有用。