如何将列中的行拆分为一个时间序列

时间:2019-02-14 11:02:59

标签: r

我有一个包含3个变量的数据集:userIDytimestampdf是一个例子。

df <- data.frame(userID=c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3),  
                 y=c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.01), 
                 timestamp=as.POSIXct(c("2017-10-01 21:00:00",  
                                        "2017-10-01 22:00:00", 
                                        "2017-10-01 23:00:00", 
                                        "2017-10-02 00:00:00",  
                                        "2017-10-01 21:00:00", 
                                        "2017-10-01 22:00:00", 
                                        "2017-10-01 23:00:00",  
                                        "2017-10-01 22:00:00", 
                                        "2017-10-01 23:00:00", 
                                        "2017-10-02 00:00:00"),  tz="GMT"))

我想用userID分割行,并用相同的timestamp像列那样连接块,如df_new

df_new <- data.frame(as.POSIXct(c("2017-10-01 21:00:00",  
                                  "2017-10-01 22:00:00", 
                                  "2017-10-01 23:00:00", 
                                  "2017-10-02 00:00:00"), tz="GMT"),  
                     c(0.1, 0.2, 0.3, 0.4), c(0.5, 0.6, 0.7,NA),  
                     c(NA, 0.8, 0.9, 0.01))
colnames(df_new) <- c("timestamp", "1", "2", "3") 

我尝试使用命令split(df, df$userID),但无法加入这些列。

我有一个巨大的数据框,因此我需要一个在大数据集上可用的解决方案。 有人可以帮我吗?

我需要进行这种转换,因为我必须将结果数据帧用作多个每小时的时间序列。

1 个答案:

答案 0 :(得分:0)

您可以使用data.table::dcast()方法,这种方法非常快。

library(data.table)
dcast(df, timestamp ~ userID, value.var=c("y"))
#             timestamp   1   2    3
# 1 2017-10-01 21:00:00 0.1 0.5   NA
# 2 2017-10-01 22:00:00 0.2 0.6 0.80
# 3 2017-10-01 23:00:00 0.3 0.7 0.90
# 4 2017-10-02 00:00:00 0.4  NA 0.01