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