R-重塑中的时间序列?
我正在尝试分析outlook中导出的.ics文件。 下面的示例数据集中给出了该文件的结构R-重塑中的时间序列?,r,sequence,R,Sequence,我正在尝试分析outlook中导出的.ics文件。 下面的示例数据集中给出了该文件的结构 d1 <- structure(list(start = structure(1:3, .Label = c("01.01.2014 09:00", "01.01.2014 18:00", "02.01.2014 08:00"), class = "factor"), end = structure(1:3, .Label = c("01.01.2014 17:00", "01.01.2014 1
d1 <- structure(list(start = structure(1:3, .Label = c("01.01.2014 09:00", "01.01.2014 18:00", "02.01.2014 08:00"), class = "factor"), end = structure(1:3, .Label = c("01.01.2014 17:00", "01.01.2014 19:00", "02.01.2014 11:00"), class = "factor"), sth = structure(1:3, .Label = c("A", "B", "C"), class = "factor")), .Names = c("start", "end", "sth" ), class = "data.frame", row.names = c(NA, -3L))
d1我们可以使用data.table
。将'data.frame'转换为'data.table'(setDT(d1)
),将'start'和'end'转换为POSIXct类,通过获取按'sth'分组的'start'和'end'列的seq
扩展数据集,并与'time'的第一个和最后一个观测值的seq
连接,并将NA
元素更改为'
library(data.table)
res <- setkey(setDT(d1)[, 1:2 := lapply(.SD, as.POSIXct,
format='%d.%m.%Y %H:%M'), .SDcols=1:2][,list(time=seq(start, end,
by='hour')) ,sth], time)[J(seq(time[1L], time[.N], by='hour'))][
is.na(sth), sth:='']
非常感谢@akrun!你让我开心!
我想我现在有了我的解决方案,虽然不太漂亮,但它对我很有效
library(data.table)
t1 <- setDT(d1)[, seq(from=as.POSIXct(start, format='%d.%m.%Y %H:%M'), to=as.POSIXct(end, format='%d.%m.%Y %H:%M'), by='hour'), sth]
t2 <- seq(t1$V1[1], t1$V1[nrow(t1)], by="hour")
t1 <- as.data.frame(t1)
t2 <- data.frame(t2)
names(t2) <- "time"
names(t1) <- c("sth", "time")
merge(t2, t1, by="time", all=T)
库(data.table)
t1我做错了什么。。?它向我抛出了一个错误:seq.POSIXt中的错误(time[1L],time[.N],by=“hour”):“to”的长度必须为1
我使用了数据。表1.9.5,我得到的结果如“d2”所示。您正在使用哪个版本的data.table?使用您的。我从上面复制了您的代码,并在上面给出的数据上运行。data.table_1.9.2。让我更新并再次测试它。与最新版本的R和data.table完美配合!Thanx!!
res[, time:= format(time, '%d.%m.%Y %H:%M')]
# sth time
# 1: A 01.01.2014 09:00
# 2: A 01.01.2014 10:00
# 3: A 01.01.2014 11:00
# 4: A 01.01.2014 12:00
# 5: A 01.01.2014 13:00
# 6: A 01.01.2014 14:00
# 7: A 01.01.2014 15:00
# 8: A 01.01.2014 16:00
# 9: A 01.01.2014 17:00
#10: B 01.01.2014 18:00
#11: B 01.01.2014 19:00
#12: 01.01.2014 20:00
#13: 01.01.2014 21:00
#14: 01.01.2014 22:00
#15: 01.01.2014 23:00
#16: 02.01.2014 00:00
#17: 02.01.2014 01:00
#18: 02.01.2014 02:00
#19: 02.01.2014 03:00
#20: 02.01.2014 04:00
#21: 02.01.2014 05:00
#22: 02.01.2014 06:00
#23: 02.01.2014 07:00
#24: C 02.01.2014 08:00
#25: C 02.01.2014 09:00
#26: C 02.01.2014 10:00
#27: C 02.01.2014 11:00
# sth time
library(data.table)
t1 <- setDT(d1)[, seq(from=as.POSIXct(start, format='%d.%m.%Y %H:%M'), to=as.POSIXct(end, format='%d.%m.%Y %H:%M'), by='hour'), sth]
t2 <- seq(t1$V1[1], t1$V1[nrow(t1)], by="hour")
t1 <- as.data.frame(t1)
t2 <- data.frame(t2)
names(t2) <- "time"
names(t1) <- c("sth", "time")
merge(t2, t1, by="time", all=T)