我想对数据框进行子集化,以便仅保留秒数为偶数的观察结果。
您可以下载我的一小部分数据 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
我了解如何从 here 和 here 对时间间隔进行子集化,但我一直无法找到与我的问题类似的示例,坦率地说,我不知道从哪里开始。
谢谢!
注意:时间戳变量已被格式化为 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/