Как я могу отменить назначение столбца списка с числами?

#r #tidyr #tsibble

#r #tidyr #tsibble

Вопрос:

Я не понимаю, как я могу отменить проверку столбца списка файлов. Недавно я обновил R-версию старого проекта, что привело к нерабочему коду.

Пример данных:

 library(tidyverse)
library(fable)
library(tsibble)
library(tsibbledata)

data <- tsibbledata::hh_budget
data

# A tsibble: 88 x 8 [1Y]
# Key:       Country [4]
   Country    Year  Debt     DI Expenditure Savings Wealth Unemployment
   <chr>     <dbl> <dbl>  <dbl>       <dbl>   <dbl>  <dbl>        <dbl>
 1 Australia  1995  95.7 3.72          3.40   5.24    315.         8.47
 2 Australia  1996  99.5 3.98          2.97   6.47    315.         8.51
 3 Australia  1997 108.  2.52          4.95   3.74    323.         8.36
 4 Australia  1998 115.  4.02          5.73   1.29    339.         7.68
 5 Australia  1999 121.  3.84          4.26   0.638   354.         6.87
 6 Australia  2000 126.  3.77          3.18   1.99    350.         6.29
 7 Australia  2001 132.  4.36          3.10   3.24    348.         6.74
 8 Australia  2002 149.  0.0218        4.03  -1.15    349.         6.37
 9 Australia  2003 159.  6.06          5.04  -0.413   360.         5.93
10 Australia  2004 170.  5.53          4.54   0.657   379.         5.40
# ... with 78 more rows
  

вложите данные:

 data_nested <- data %>% 
               nest(data = c(-Country)) 
 
  

Это также будет выполнять ту же вложенность:

 data_nested <- data %>% 
               group_by_key() %>% 
               nest() 

data_nested
  

Приводит к этому:

 # A tibble: 4 x 2
# Groups:   Country [4]
  Country   data              
  <chr>     <list>            
1 Australia <tsibble [22 x 7]>
2 Canada    <tsibble [22 x 7]>
3 Japan     <tsibble [22 x 7]>
4 USA       <tsibble [22 x 7]> 
  

Теперь я хотел бы отменить проверку этого, я хотел бы получить то же, что и входные данные, tsibble с 88 строками, ключ: Country [4], …

Тогда я использовал это:

 tsibble::unnest_tsibble(data_nested, cols = data)
  

Выдает сообщение об ошибке, которое я вообще не понимаю.

 Error in if (unknown_interval(interval) amp;amp; (nrows > vec_size(key_data))) { : 
  missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In min(..., na.rm = TRUE) :
  no non-missing arguments to min; returning Inf
2: In max(..., na.rm = TRUE) :
  no non-missing arguments to max; returning -Inf
  

Я знаю, что были эти обновления, я немного поиграл с unnest_wider и unnest_longer и unnest_legacy.

 unnest_longer(data_nested, col = data)

Error in if (unknown_interval(interval) amp;amp; (nrows > vec_size(key_data))) { : 
  missing value where TRUE/FALSE needed
In addition: Warning messages:
1: In min(..., na.rm = TRUE) :
  no non-missing arguments to min; returning Inf
2: In max(..., na.rm = TRUE) :
  no non-missing arguments to max; returning -Inf
  

Unnest legacy допускает только tibbles…

 unnest_legacy(data_nested)

Error: The result is not a valid tsibble.
i Do you need `as_tibble()` to work with data frame?
  

Единственное, что сработало, действительно громоздко:

 data_again_unnested <- data_nested %>% 
                       unnest_wider(data) %>% 
                       unnest(cols = c(-Country))
data_again_unnested

# A tibble: 88 x 8
   Country    Year  Debt     DI Expenditure Savings Wealth Unemployment
   <chr>     <dbl> <dbl>  <dbl>       <dbl>   <dbl>  <dbl>        <dbl>
 1 Australia  1995  95.7 3.72          3.40   5.24    315.         8.47
 2 Australia  1996  99.5 3.98          2.97   6.47    315.         8.51
 3 Australia  1997 108.  2.52          4.95   3.74    323.         8.36
 4 Australia  1998 115.  4.02          5.73   1.29    339.         7.68
 5 Australia  1999 121.  3.84          4.26   0.638   354.         6.87
 6 Australia  2000 126.  3.77          3.18   1.99    350.         6.29
 7 Australia  2001 132.  4.36          3.10   3.24    348.         6.74
 8 Australia  2002 149.  0.0218        4.03  -1.15    349.         6.37
 9 Australia  2003 159.  6.06          5.04  -0.413   360.         5.93
10 Australia  2004 170.  5.53          4.54   0.657   379.         5.40
# ... with 78 more rows
  

Но он, конечно, выводит tibble, поэтому мне снова нужно будет принудительно вернуть его к tsibble, это довольно раздражает, много шагов, только для простого unnest.

 data_again_unnested %>% as_tsibble(key = Country, index = Year)

# A tsibble: 88 x 8 [1Y]
# Key:       Country [4]
   Country    Year  Debt     DI Expenditure Savings Wealth Unemployment
   <chr>     <dbl> <dbl>  <dbl>       <dbl>   <dbl>  <dbl>        <dbl>
 1 Australia  1995  95.7 3.72          3.40   5.24    315.         8.47
 2 Australia  1996  99.5 3.98          2.97   6.47    315.         8.51
 3 Australia  1997 108.  2.52          4.95   3.74    323.         8.36
 4 Australia  1998 115.  4.02          5.73   1.29    339.         7.68
 5 Australia  1999 121.  3.84          4.26   0.638   354.         6.87
 6 Australia  2000 126.  3.77          3.18   1.99    350.         6.29
 7 Australia  2001 132.  4.36          3.10   3.24    348.         6.74
 8 Australia  2002 149.  0.0218        4.03  -1.15    349.         6.37
 9 Australia  2003 159.  6.06          5.04  -0.413   360.         5.93
10 Australia  2004 170.  5.53          4.54   0.657   379.         5.40
# ... with 78 more rows
  

Нет ли другого способа сделать это? У кого-нибудь есть идея?

Комментарии:

1. Функция unnest_tsibble устарела

2. Я знаю, что unnest_tsibble устарел. Я сказал, что использовал его в своем старом коде. Мой вопрос в том, есть ли другой способ отменить список столбцов tsibble вместо этого громоздкого обходного пути. Когда обновление приводит к переключению с одной строки на три, кажется, что что-то не так.

3. Привет, Nhaj, на самом деле хороший вопрос.. Функция, которая приводит к этой проблеме, — vctrs::vec_unchop [try: vctrs::vec_unchop(data_nested$data) ] . Единственное решение, которое я нашел data %>% nest_by(Country) %>% unnest(data) , но оно возвращает tibble вместо tsibble .. все еще ищет..

4. таким образом, вы успешно отменяете проверку столбца и создаете уникальный tsibble : vctrs::vec_unchop(data_nested$data, indices = tsibble::key_rows(data)) . Однако нет способа передать эту indeces информацию в vec_unchop

5. github.com/tidyverts/tsibble/issues/220