处理R中的日期和时间数据

时间:2011-03-01 17:38:40

标签: r

亲爱的,我有一个直接来自传感器的数据框。数据在单个列中提供日期和时间。我希望R能够识别这些数据,然后在数据框中创建一个相邻的列,该列给出的数字对应于时间和日期列中的新日期。例如,数据$ time.date中的25/02/2011 13:34将在新的列数据$ day中给出1,而在数据$ time.date中的26/02/2011 13:34将得到2,依此类推。 ..

有谁知道如何解决这个问题?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

您可以使用cut() 并将该调用产生的因素转换为数字。以下是虚拟数据的示例:

> sdate <- as.POSIXlt("25/02/2011 13:34", format = "%d/%m/%Y %H:%M")
> edate <- as.POSIXlt("02/03/2011 13:34", format = "%d/%m/%Y %H:%M")
> df <- data.frame(dt = seq(from = sdate, to = edate, by = "hours"))
> head(df)
                   dt
1 2011-02-25 13:34:00
2 2011-02-25 14:34:00
3 2011-02-25 15:34:00
4 2011-02-25 16:34:00
5 2011-02-25 17:34:00
6 2011-02-25 18:34:00

我们使用cut()将日期时间列缩减为几天。 这会导致将日期作为标签。我们将此因子转换为数字以获得1, 2, ...

> df <- within(df, day <- cut(dt, "day", labels = FALSE)))
> head(df, 13)
                    dt day
1  2011-02-25 13:34:00   1
2  2011-02-25 14:34:00   1
3  2011-02-25 15:34:00   1
4  2011-02-25 16:34:00   1
5  2011-02-25 17:34:00   1
6  2011-02-25 18:34:00   1
7  2011-02-25 19:34:00   1
8  2011-02-25 20:34:00   1
9  2011-02-25 21:34:00   1
10 2011-02-25 22:34:00   1
11 2011-02-25 23:34:00   1
12 2011-02-26 00:34:00   2
13 2011-02-26 01:34:00   2

答案 1 :(得分:3)

您可以使用cut.POSIXt实现此目的。例如:

dat <- data.frame(datetimes = Sys.time() - seq(360000, 0, by=-3600))
dat$day <- cut(dat$datetimes, breaks="day", labels=FALSE)

请注意,这假设您的日期时间列已确定为日期时间类。

有关详细信息,请参阅?DateTimeClasses