R子集data.frame在时间戳

时间:2019-01-24 17:33:44

标签: r dataframe timestamp filtering posixct

仅当相应的时间戳记在列表中时,我才想在时间戳列上过滤我的数据框,以选择该行。

boxplot_data <- subset(new_data, timestamp %in% selected_timestamps)

new_data是一个包含timestamp列(PosixCT类型)的数据帧,selected_timestamps是一个与timestamp列相同类型的向量(我也尝试过使用列表)。 以这种方式进行过滤,我只有一个具有相同列号的空数据框。 有提示吗?

更新 这是一些new_data:

 201021 2013-06-11 22:58:39                 19                    10      0.5263158
 201021 2013-06-11 23:03:40                 19                     9      0.4736842

时间戳类型为:

timestamp            : POSIXct, format: ....

和选定的时间戳记:

[1] "2013-06-11 09:03:39 CEST" "2013-06-11 10:03:39 CEST" "2013-06-11 11:03:44 CEST"
[4] "2013-06-11 12:03:39 CEST" "2013-06-11 13:03:39 CEST" "2013-06-11 14:03:39 CEST"
[7] "2013-06-11 15:03:39 CEST" "2013-06-11 16:03:40 CEST" "2013-06-11 17:03:39 CEST"

selected_timestamps的类型是:

POSIXct[1:24], format: ....

1 个答案:

答案 0 :(得分:0)

我希望问题是由于data.frame中的timestamp列具有不同的时区属性。当时区相同时,子设置工作正常,请参见以下代码:

x <- as.POSIXct(c("2013-06-11 22:58:39", "2013-06-11 22:58:40", "2013-06-11 22:58:41", "2013-06-11 22:58:42"))
y <- as.POSIXct(c("2013-06-11 22:58:40", "2013-06-11 22:58:41"))

df <- data.frame(timestamp = x)
print(df)
subset(df, timestamp %in% y)

df$timestamp[[2]]
y[1]

输出:

> print(df)
            timestamp
1 2013-06-11 22:58:39
2 2013-06-11 22:58:40
3 2013-06-11 22:58:41
4 2013-06-11 22:58:42
> subset(df, timestamp %in% y)
            timestamp
2 2013-06-11 22:58:40
3 2013-06-11 22:58:41
> df$timestamp[[2]]
[1] "2013-06-11 22:58:40 CEST"
> y[1]
[1] "2013-06-11 22:58:40 CEST"

我建议您按print(new_data$timestamp[1])检查时区。