我想对数据框进行子集化,以便仅保留秒数为偶数的观察结果。

您可以下载我的一小部分数据 here(100 行)。

前 6 行如下所示:

            Timestamp C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 C13 C14
1 2013-04-01 00:00:00   0   1   1   1   1   0   1   1   1   1   0   1   0   1
2 2013-04-01 00:00:01   0   1   1   1   1   0   1   1   1   1   0   1   0   1
3 2013-04-01 00:00:02   0   1   1   1   1   0   1   1   1   1   0   1   0   1
4 2013-04-01 00:00:03   0   1   1   1   1   0   1   1   1   1   0   1   0   1
5 2013-04-01 00:00:04   0   1   1   1   1   0   1   1   1   1   0   1   0   1
6 2013-04-01 00:00:05   0   1   1   1   1   0   1   1   1   1   0   1   0   1

我希望它看起来像这样:
            Timestamp C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 C13 C14
1 2013-04-01 00:00:00   0   1   1   1   1   0   1   1   1   1   0   1   0   1
2 2013-04-01 00:00:02   0   1   1   1   1   0   1   1   1   1   0   1   0   1
3 2013-04-01 00:00:04   0   1   1   1   1   0   1   1   1   1   0   1   0   1
4 2013-04-01 00:00:06   0   1   1   1   1   0   1   1   1   1   0   1   0   1
5 2013-04-01 00:00:08   0   1   1   1   1   0   1   1   1   1   0   1   0   1
6 2013-04-01 00:00:10   0   1   1   1   1   0   1   1   1   1   0   1   0   1

我了解如何从 herehere 对时间间隔进行子集化,但我一直无法找到与我的问题类似的示例,坦率地说,我不知道从哪里开始。

谢谢!

注意:时间戳变量已被格式化为 POSIXct。

最佳答案

不使用任何外部包,你可以做(​​甚至)

res =  df[(as.numeric(substr(df$Timestamp, 18, 19)) %% 2) == 0,]

出于测试目的,我使用了数据框的一小部分:
df = data.frame(Timestamp = c("2013-04-01 00:00:00", "2013-04-01 00:00:01", "2013-04-01 00:00:02", "2013-04-01 00:00:03", "2013-04-01 00:00:04"), C01 = rep(0,5), C02 = rep(1,5))
df$Timestamp = as.POSIXct(df$Timestamp)

这是您获得的(甚至):
#> res
#            Timestamp C01 C02
#1 2013-04-01 00:00:00   0   1
#3 2013-04-01 00:00:02   0   1
#5 2013-04-01 00:00:04   0   1

对于奇数,通过将 ==0 替换为 ==1 来应用相同的逻辑

关于r - 按奇数或偶数秒对 POSIXct 时间进行子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19666374/

10-12 19:21