为什么 pivot_wider 会产生嵌套的 objects/lists 和 NULL?

Why does pivot_wider produce nested objects/lists and NULLs?

我有一个包含对及其增量的数据框。当我尝试扩大此 df 时,我收到一个 table,列表中嵌套了双对象,尽管它们看起来像数据集的常规值。此外,pivot_wider 产生 NULL 值,即使我去 values_fill = NA.

但是,当我获取此数据框的一个子集并尝试扩大它时,一切正常。为什么?没看懂。

如何获得常规宽度 table?

> test_df %>% pivot_wider(names_from = pair, values_from = delta)
# A tibble: 1 x 400
  pair_ind11_ind04 pair_ind11_ind03 pair_ind11_ind10 pair_ind12_ind11 pair_ind12_ind04
  <list>           <list>           <list>           <list>           <list>          
1 <dbl [5,156]>    <dbl [5,378]>    <dbl [5,805]>    <dbl [7,054]>    <dbl [6,662]>   
# ... with 395 more variables: pair_ind12_ind06 <list>, pair_ind12_ind07 <list>,
#   pair_ind12_ind02 <list>, pair_ind12_ind08 <list>, pair_ind12_ind09 <list>,
#   pair_ind12_ind01 <list>, pair_ind12_ind05 <list>, pair_ind13_ind12 <list>,
#   pair_ind13_ind04 <list>, pair_ind13_ind03 <list>, pair_ind13_ind10 <list>,
#   pair_ind17_ind12 <list>, pair_ind17_ind04 <list>, pair_ind17_ind03 <list>,
#   pair_ind17_ind10 <list>, pair_ind18_ind11 <list>, pair_ind18_ind12 <list>,
#   pair_ind18_ind13 <list>, pair_ind18_ind17 <list>, pair_ind18_ind06 <list>, ...

# Taking a subset of my df

> test_df[1:150,] %>% pivot_wider(names_from = pair, values_from = delta)
# A tibble: 1 x 150
  pair_ind11_ind04 pair_ind11_ind03 pair_ind11_ind10 pair_ind12_ind11 pair_ind12_ind04
             <dbl>            <dbl>            <dbl>            <dbl>            <dbl>
1                1                0                0                1                1
# ... with 145 more variables: pair_ind12_ind06 <dbl>, pair_ind12_ind07 <dbl>,
#   pair_ind12_ind02 <dbl>, pair_ind12_ind08 <dbl>, pair_ind12_ind09 <dbl>,
#   pair_ind12_ind01 <dbl>, pair_ind12_ind05 <dbl>, pair_ind13_ind12 <dbl>,
#   pair_ind13_ind04 <dbl>, pair_ind13_ind03 <dbl>, pair_ind13_ind10 <dbl>,
#   pair_ind17_ind12 <dbl>, pair_ind17_ind04 <dbl>, pair_ind17_ind03 <dbl>,
#   pair_ind17_ind10 <dbl>, pair_ind18_ind11 <dbl>, pair_ind18_ind12 <dbl>,
#   pair_ind18_ind13 <dbl>, pair_ind18_ind17 <dbl>, pair_ind18_ind06 <dbl>, ... 

示例数据:

structure(list(delta = c(1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 
1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 
1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0), 
    pair = c("pair_ind11_ind04", "pair_ind11_ind03", "pair_ind11_ind10", 
    "pair_ind12_ind11", "pair_ind12_ind04", "pair_ind12_ind06", 
    "pair_ind12_ind07", "pair_ind12_ind02", "pair_ind12_ind08", 
    "pair_ind12_ind09", "pair_ind12_ind01", "pair_ind12_ind05", 
    "pair_ind13_ind12", "pair_ind13_ind04", "pair_ind13_ind03", 
    "pair_ind13_ind10", "pair_ind17_ind12", "pair_ind17_ind04", 
    "pair_ind17_ind03", "pair_ind17_ind10", "pair_ind18_ind11", 
    "pair_ind18_ind12", "pair_ind18_ind13", "pair_ind18_ind17", 
    "pair_ind18_ind06", "pair_ind18_ind07", "pair_ind18_ind16", 
    "pair_ind18_ind02", "pair_ind18_ind03", "pair_ind18_ind08", 
    "pair_ind18_ind09", "pair_ind18_ind10", "pair_ind18_ind14", 
    "pair_ind18_ind15", "pair_ind18_ind01", "pair_ind18_ind05", 
    "pair_ind04_ind02", "pair_ind04_ind03", "pair_ind04_ind01", 
    "pair_ind06_ind04", "pair_ind06_ind03", "pair_ind07_ind04", 
    "pair_ind07_ind03", "pair_ind16_ind12", "pair_ind16_ind04", 
    "pair_ind16_ind03", "pair_ind16_ind10", "pair_ind03_ind02", 
    "pair_ind03_ind01", "pair_ind08_ind04", "pair_ind08_ind03", 
    "pair_ind09_ind04", "pair_ind09_ind03", "pair_ind10_ind04", 
    "pair_ind10_ind06", "pair_ind10_ind07", "pair_ind10_ind02", 
    "pair_ind10_ind08", "pair_ind10_ind09", "pair_ind10_ind01", 
    "pair_ind10_ind05", "pair_ind14_ind12", "pair_ind14_ind04", 
    "pair_ind14_ind03", "pair_ind14_ind10", "pair_ind15_ind12", 
    "pair_ind15_ind04", "pair_ind15_ind03", "pair_ind15_ind10", 
    "pair_ind20_ind12", "pair_ind20_ind18", "pair_ind20_ind04", 
    "pair_ind20_ind03", "pair_ind20_ind10", "pair_ind20_ind19", 
    "pair_ind05_ind04", "pair_ind05_ind03", "pair_ind19_ind11", 
    "pair_ind19_ind12", "pair_ind19_ind13", "pair_ind19_ind17", 
    "pair_ind19_ind06", "pair_ind19_ind07", "pair_ind19_ind16", 
    "pair_ind19_ind02", "pair_ind19_ind03", "pair_ind19_ind08", 
    "pair_ind19_ind09", "pair_ind19_ind10", "pair_ind19_ind14", 
    "pair_ind19_ind15", "pair_ind19_ind01", "pair_ind19_ind05", 
    "pair_ind40_ind27", "pair_ind40_ind29", "pair_ind40_ind35", 
    "pair_ind40_ind28", "pair_ind40_ind30", "pair_ind40_ind33", 
    "pair_ind27_ind21", "pair_ind27_ind26", "pair_ind27_ind23", 
    "pair_ind27_ind24", "pair_ind27_ind22", "pair_ind27_ind25", 
    "pair_ind34_ind27", "pair_ind34_ind29", "pair_ind34_ind28", 
    "pair_ind34_ind30", "pair_ind34_ind33", "pair_ind29_ind27", 
    "pair_ind29_ind21", "pair_ind29_ind26", "pair_ind29_ind23", 
    "pair_ind29_ind24", "pair_ind29_ind22", "pair_ind29_ind25", 
    "pair_ind32_ind27", "pair_ind32_ind29", "pair_ind32_ind28", 
    "pair_ind32_ind30", "pair_ind35_ind34", "pair_ind35_ind29", 
    "pair_ind35_ind32", "pair_ind35_ind21", "pair_ind35_ind28", 
    "pair_ind35_ind26", "pair_ind35_ind33", "pair_ind35_ind23", 
    "pair_ind35_ind24", "pair_ind35_ind31", "pair_ind35_ind22", 
    "pair_ind35_ind25", "pair_ind28_ind27", "pair_ind28_ind21", 
    "pair_ind28_ind26", "pair_ind28_ind23", "pair_ind28_ind24", 
    "pair_ind28_ind22", "pair_ind28_ind25", "pair_ind30_ind29", 
    "pair_ind30_ind21", "pair_ind30_ind28", "pair_ind30_ind26", 
    "pair_ind30_ind23", "pair_ind30_ind24", "pair_ind30_ind22", 
    "pair_ind30_ind25", "pair_ind33_ind27", "pair_ind33_ind32", 
    "pair_ind33_ind21", "pair_ind33_ind26", "pair_ind33_ind30", 
    "pair_ind33_ind23", "pair_ind33_ind24", "pair_ind33_ind31", 
    "pair_ind33_ind22", "pair_ind33_ind25", "pair_ind39_ind27", 
    "pair_ind39_ind29", "pair_ind39_ind35", "pair_ind39_ind28", 
    "pair_ind39_ind30", "pair_ind39_ind33", "pair_ind41_ind27", 
    "pair_ind41_ind29", "pair_ind41_ind35", "pair_ind41_ind28", 
    "pair_ind41_ind30", "pair_ind41_ind33", "pair_ind31_ind27", 
    "pair_ind31_ind29", "pair_ind31_ind28", "pair_ind31_ind30", 
    "pair_ind36_ind27", "pair_ind36_ind29", "pair_ind36_ind35", 
    "pair_ind36_ind28", "pair_ind36_ind30", "pair_ind36_ind33", 
    "pair_ind37_ind27", "pair_ind37_ind29", "pair_ind37_ind35", 
    "pair_ind37_ind28", "pair_ind37_ind30", "pair_ind37_ind33", 
    "pair_ind38_ind27", "pair_ind38_ind29", "pair_ind38_ind35", 
    "pair_ind38_ind28", "pair_ind38_ind30", "pair_ind38_ind33", 
    "pair_ind14_ind02", "pair_ind14_ind09", "pair_ind14_ind03", 
    "pair_ind14_ind08", "pair_ind14_ind10", "pair_ind14_ind05", 
    "pair_ind15_ind02", "pair_ind15_ind09")), row.names = c(NA, 
-200L), class = c("tbl_df", "tbl", "data.frame"))

好吧,unchop(everything()) 帮我解决了这个问题。我不会删除我的问题,因为它可能会在将来帮助其他用户。

test_df %>%
     pivot_wider(names_from = pair, values_from = delta) %>%
     unchop(everything())

unchop() makes df longer by expanding list-columns so that each element of the list-column gets its own row in the output.

来源:https://tidyr.tidyverse.org/reference/chop.html