我有一个包含3个变量的数据集:userID
,y
和timestamp
。 df
是一个例子。
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)
,但无法加入这些列。
我有一个巨大的数据框,因此我需要一个在大数据集上可用的解决方案。 有人可以帮我吗?
我需要进行这种转换,因为我必须将结果数据帧用作多个每小时的时间序列。
答案 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