Как преобразовать столбец списка в вектор в тибле в R - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь свернуть столбец «Недели» в таблице ниже (так называемые данные), чтобы в результате появился столбец с двумя столбцами: один для недель и другой для связанных значений.Поскольку столбец недель представляет собой список, я не уверен, как это сделать.Не могли бы вы помочь?

> head(data)
# A tibble: 6 x 1
  ``$Weeks   $Value
  <list>      <dbl>
1 <date [9]>     30
2 <date [3]>     20
3 <date [3]>     15
4 <date [5]>     10
5 <date [2]>      9
6 <date [9]>      5

желаемый результат будет выглядеть следующим образом:

      $Weeks   $Value
      <Date>      <dbl>
 1  "2019-01-01     30
 2  "2019-01-08     30
 3  "2019-01-15     30
 etc..

Текущая структура:

  > str(data)
List of 1
 $ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   7 obs. of  2 variables:
  ..$ Weeks:List of 7
  .. ..$ : Date[1:9], format: "2018-11-11" "2018-11-18" "2018-11-25" "2018-12-02" ...
  .. ..$ : Date[1:3], format: "2018-12-02" "2018-12-09" "2018-12-16"
  .. ..$ : Date[1:3], format: "2018-12-23" "2018-12-30" "2019-01-06"
  .. ..$ : Date[1:5], format: "2018-11-04" "2018-11-11" "2018-11-18" "2018-11-25" ...
  .. ..$ : Date[1:2], format: "2018-11-25" "2018-12-02"
  .. ..$ : Date[1:9], format: "2018-11-18" "2018-11-25" "2018-12-02" "2018-12-09" ...
  .. ..$ : Date[1:14], format: "2018-09-30" "2018-10-07" "2018-10-14" "2018-10-21" ...
  ..$ Value: num [1:7] 30 20 15 10 9 5 6

dput (data)

> dput(data)
list(structure(list(Weeks = list(structure(c(17846, 17853, 17860, 
17867, 17874, 17881, 17888, 17895, 17902), class = "Date"), structure(c(17867, 
17874, 17881), class = "Date"), structure(c(17888, 17895, 17902
), class = "Date"), structure(c(17839, 17846, 17853, 17860, 17867
), class = "Date"), structure(c(17860, 17867), class = "Date"), 
    structure(c(17853, 17860, 17867, 17874, 17881, 17888, 17895, 
    17902, 17909), class = "Date"), structure(c(17804, 17811, 
    17818, 17825, 17832, 17839, 17846, 17853, 17860, 17867, 17874, 
    17881, 17888, 17895), class = "Date")), Value = c(30, 20, 
15, 10, 9, 5, 6)), row.names = c(NA, -7L), class = c("tbl_df", 
"tbl", "data.frame")))

1 Ответ

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

Отредактированный ответ

Хорошо, поэтому ваши исходные данные сохраняются в виде списка, что не позволяет функции unnest() работать так, как ожидается.Сначала нам нужно извлечь элемент.Тогда, поскольку ваш столбец списка сам является списком списков, нам придется использовать map, чтобы извлечь то, что мы хотим.Приведенное ниже решение решает эту проблему и дает вам то, что вы хотите.

  > data[[1]] %>%
      mutate(Weeks = map(Weeks, ~ tibble(Weeks =.x))) %>%
      unnest()

Вывод:

  # A tibble: 45 x 2
    Value Weeks     
    <dbl> <date>    
  1    30 2018-11-11
  2    30 2018-11-18
  3    30 2018-11-25
  4    30 2018-12-02
  5    30 2018-12-09
  6    30 2018-12-16
  7    30 2018-12-23
  8    30 2018-12-30
  9    30 2019-01-06
 10    20 2018-12-02

Оригинальный ответ:

AsАкрун сказал в комментариях, можно просто сделать unnest(data, Weeks).

...