1

我有一个名为的数据框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; 不确定这是否可以轻松完成。推理是建模数据和测量数据不会完全匹配,因此在比较两个数据集的图时,秒数并不那么重要。希望这是有道理的。谢谢!

4

2 回答 2

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")
于 2015-11-13T17:18:00.317 回答
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'))
于 2015-11-13T18:24:32.710 回答