Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-重塑中的时间序列?_R_Sequence - Fatal编程技术网

R-重塑中的时间序列?

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

我正在尝试分析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 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)