Как я могу отделить список списков в кадре данных? - PullRequest
0 голосов
/ 22 октября 2018

Я анализирую фрейм данных с traintrips.Данные форматируются следующим образом:

 tripnumber stop       
<int> <list>     
1 <list [34]>
2 <list [34]>
3 <list [33]>
4 <list [20]>
5 <list [17]>
6 <list [17]>

Каждый номер поездки связан с определенным количеством остановок, поездка 1 имеет, например, 34 остановки.

Важным примечанием является то, что списки остановокне списки только станций, но они отформатированы как другие списки со станцией + информация (назовем эти списки станций), структурированные так:

список (Station = "ams", Arival_time = "0135", Departure_time = "0138", Index = "1")

Я хочу, чтобы список списков станций не включался в первый столбец после номера поездки в первом списке станций, во втором столбце второй список станцийи т. д., чтобы он выглядел следующим образом:

 tripnumber stop1 stop2 stop3 stop4 stop5 .... 
<int> <list>     
1 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]> ....
2 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]> ....
3 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]> ....
4 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]> ....
5 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]> ....
6 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]> ....

Я попытался отформатировать это с помощью библиотеки purrr.Однако я не слишком знаком с этим пакетом, и трудность в том, что я не могу заставить его работать без потери структуры tripnumber или структуры "stationlist".

Любые советы, как решить эту проблему?

Правки:

  • Следующее dput(head(traintrips) можно скопировать и вставить в R как файл теста: .txt файл
  • Если столбцов остановок больше, чем фактических остановок, ячейка должна оставаться пустой ("")

1 Ответ

0 голосов
/ 24 октября 2018

Получил это, отменив и дополнительно изменив результат, используя следующий код:

DFnew <- unnest(traintrips, traintrips$stop) 
DFnew$time <- with(DFnew, ave(tripnumber, tripnumber, FUN = seq_along)) # add time column
names(DFnew)[2] <- paste("stop") # to remove the dollar sign from the colname of the unnested data
DFnew <- spread(DFnew, time, stop)

С результатом:

> dim(DFnew)
[1]  6 35

> head(DFnew[,1:6])
# A tibble: 6 x 6
  tripnumber `1`        `2`        `3`        `4`        `5`       
       <int> <list>     <list>     <list>     <list>     <list>    
1          1 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]>
2          2 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]>
3          3 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]>
4          4 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]>
5          5 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]>
6          6 <list [4]> <list [4]> <list [4]> <list [4]> <list [4]>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...