как разбить строки в столбцах, чтобы иметь временной ряд - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть набор данных с 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), но я не смог соединить столбцы.

У меня огромный массив данных, поэтому мне нужно решение, доступное для большого набора данных.Кто-нибудь может мне помочь, пожалуйста?

Мне нужно сделать эту трансформацию, потому что я должен использовать полученный фрейм данных как несколько часовых временных рядов.

1 Ответ

0 голосов
/ 14 февраля 2019

Вы можете использовать подход 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...