【问题标题】:Correctly getting data from wide to long using pivot_longer [duplicate]使用 pivot_longer 正确地从宽到长获取数据 [重复]
【发布时间】:2021-10-05 03:49:52
【问题描述】:

我正在努力尝试使用 pivot_longer 正确地将我的数据从宽到长。

我的数据目前如下所示:

# A tibble: 1 x 11
  Player    completetion.rank~ completion.rank.n~ ypc.rank.2020 ypc.rank.not2020 ypc.td.2020 ypc.td.not2020 ypc.int.2020 ypc.int.not2020
  <chr>                  <dbl>              <dbl>         <dbl>            <dbl>       <dbl>          <dbl>        <dbl>           <dbl>
1 Tom Brady                  1              0.375             1            0.375           1          0.312         0.25           0.375
# ... with 2 more variables: ypc.sack.2020 <dbl>, ypc.sack.not2020 <dbl>

最后,我希望数据是这样组织的:

最后,这是一个可重现的数据示例:

structure(list(Player = "Tom Brady", completetion.rank.2020 = 1, 
    completion.rank.not2020 = 0.375, ypc.rank.2020 = 1, ypc.rank.not2020 = 0.375, 
    ypc.td.2020 = 1, ypc.td.not2020 = 0.3125, ypc.int.2020 = 0.25, 
    ypc.int.not2020 = 0.375, ypc.sack.2020 = 0, ypc.sack.not2020 = 0.625), row.names = c(NA, 
-1L), groups = structure(list(Player = "Tom Brady", .rows = structure(list(
    1L), ptype = integer(0), class = c("vctrs_list_of", "vctrs_vctr", 
"list"))), row.names = c(NA, -1L), class = c("tbl_df", "tbl", 
"data.frame"), .drop = TRUE), class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"))

提前致谢。每次我试图弄清楚它时,整个 pivot_longer、pivot_wider 的东西都会让我陷入一个循环。

【问题讨论】:

    标签: r tidyverse tidyr


    【解决方案1】:

    您可以使用正则表达式来执行此操作 -

    tidyr::pivot_longer(df, 
                        cols = -Player, 
                        names_to = c('name', '.value'), 
                        names_pattern = '(.*)\\.(.*)')
    
    #  Player    name              `2020` not2020
    #  <chr>     <chr>              <dbl>   <dbl>
    #1 Tom Brady completetion.rank   1     NA    
    #2 Tom Brady completion.rank    NA      0.375
    #3 Tom Brady ypc.rank            1      0.375
    #4 Tom Brady ypc.td              1      0.312
    #5 Tom Brady ypc.int             0.25   0.375
    #6 Tom Brady ypc.sack            0      0.625
    

    基本上直到最后一个. 之前的所有内容都被捕获在name 列中,其余部分用于创建新列。

    【讨论】:

    • 效果很好……谢谢!意识到我在第一个拼写错误completion。更正了拼写并修复了双重 completion.rank 问题和 NA 值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多