需要使用R按特定时间对数据帧进行子集化

时间:2015-11-13 17:05:12

标签: r time subset series posixlt

我有一个名为summer.q.0的数据框,其中包含时间(X)和4个温度(X0,X0.33,X0.66和X1)。我需要在特定时间对数据帧进行子集提取行。以下是我的数据框的head

                   X     X0  X0.33  X0.66     X1
1 6/28/2009 19:30:00 30.760 27.340 25.800 24.600
2 6/28/2009 19:32:24 30.740 27.352 25.804 24.599
3 6/28/2009 19:35:16 30.740 27.363 25.807 24.599
4 6/28/2009 19:38:44 30.740 27.372 25.808 24.599
5 6/28/2009 19:40:00 30.740 27.375 25.809 24.599
6 6/28/2009 19:42:24 30.703 27.379 25.810 24.599
7 6/28/2009 19:45:16 30.703 27.384 25.810 24.599
8 6/28/2009 19:48:44 30.703 27.390 25.811 24.599

X列中,以分钟为单位的时间是随机出现的。我需要提取行X中的时间以分钟为单位的行(即分钟= 00,30或45的行)。在数据框中,X列中的值是因子。我意识到他们需要转换为可识别的R时间格式来提取所需的行但不确定最好或最简单的方法。然后在将X转换为正确的R日期和时间格式后,提取/子集所需行的最简单方法是什么?

例如:假设我的数据帧只是上面的8行(完整数据集有33601行并且是建模的温度时间序列数据),我会有一个看起来像这样的子集并且有一个新的时间格式如下:

                    X     X0  X0.33  X0.66     X1
1 2009-06-28 19:30:00 30.760 27.340 25.800 24.600
2 2009-06-28 19:45:16 30.703 27.384 25.810 24.599

在子集中,我需要对分钟正好为00,33和45(15分钟数据)的所有行进行子集化,这样我就可以将它与已经是15分钟间隔且时间有限的测量数据集进行比较POSIXlt格式。因此,子集将包含来自8行的原始数据帧的行1和7。理想情况下,我会在子集中设置秒数== 00;不确定这是否可以轻松完成。推理是建模和测量数据不完全匹配,因此在比较两个数据集的图时,秒并不重要。希望这是有道理的。谢谢!

2 个答案:

答案 0 :(得分:0)

如果您提供一个稍微更全面的示例,我们可以提供更多帮助,但这应该可以帮助您开始。

library(lubridate)

#this will return just the minutes from a date (I've added a random example to demonstrate this)
your_data$X <- format(mdy_hms(df$X, format="%M")
example <- format(mdy_hms("6/28/2009 19:30:00"), format="%M")

#you can then subset your data frame using something like this
subset_data <- subset(your_data,X == "0" | X=="30"| X=="45")

答案 1 :(得分:0)

考虑基础R解决方案:

# CONVERT COLUMN TO DATE (POSIXlt)
df$X <- strptime(df$X, "%m/%d/%Y %H:%M:%S")

# SUBSET BY NUMERIC MINUTE
df <- (df[as.numeric(format(df$X, "%M")==0)
        | as.numeric(format(df$X, "%M")==15)
        | as.numeric(format(df$X, "%M")==30)
        | as.numeric(format(df$X, "%M")==45),])

# LESS VERBOSE SUBSET
df <- subset(df, format(df$X, "%M") %in% c('0', '15', '30', '45'))