代码之家  ›  专栏  ›  技术社区  ›  Dre Day

我没有正确编写pivot_wider函数

  •  0
  • Dre Day  · 技术社区  · 1 年前

    我正在尝试运行pivot_wider,以便输出切换行和列字段。这并不能实现这一点——我在这里错过了什么?

    Current:
    
    model jan feb mar
    a     1   2   3   
    b     2   4   6   
    c     3   6   9   
    d     4   8   12
    e     5   10  14
    
    Attempting:
    month a b c d  e  f
    jan   1 2 3 4  5  6
    feb   2 4 6 8  10 12
    mar   3 6 9 12 14
    
    df <- data.frame(model = c('a', 'b', 'c', 'd', 'e'),
                     jan = c(1, 2, 3, 4, 5),
                     feb = c(2, 4, 6, 8, 10),
                     mar = c(3, 6, 9, 12, 14)
    )
    
    df %>% 
      pivot_wider(names_from = model, values_from = c(2:4), values_fill = 0)
    

    我的真实集合大约有15列,我只是想翻转这些值,并将它们与模型和月份字段绑定。我正试图让这些值在PowerBI中发挥得更好,这样我就可以按日期值对视觉效果进行排序/筛选/分组。非常感谢。

    4 回复  |  直到 1 年前
        1
  •  1
  •   TarJae    1 年前

    以下是一种无需转向的替代方法:

    library(janitor)
    library(dplyr)
    df %>% 
      t() %>% 
      row_to_names(row_number = 1) %>% 
      as.data.frame()
    
         a  b  c  d  e
    jan  1  2  3  4  5
    feb  2  4  6  8 10
    mar  3  6  9 12 14
    
        2
  •  0
  •   arg0naut91    1 年前

    您可以尝试:

    library(tidyr)
    
    df %>%
      pivot_longer(cols = -model, names_to = 'month') %>%
      pivot_wider(names_from = model)
    

    输出:

    # A tibble: 3 × 6
      month     a     b     c     d     e
      <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 jan       1     2     3     4     5
    2 feb       2     4     6     8    10
    3 mar       3     6     9    12    14
    
        3
  •  0
  •   jkatam    1 年前

    请检查一下

    df %>% pivot_longer(c(-1), names_to = 'name', values_to = 'value') %>% 
    pivot_wider(names_from = model, values_from = value) %>% 
      rename(month=name)
    

    创建于2023-01-29 reprex v2.0.2

    # A tibble: 3 × 6
      month     a     b     c     d     e
      <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 jan       1     2     3     4     5
    2 feb       2     4     6     8    10
    3 mar       3     6     9    12    14
    
    
        4
  •  0
  •   Dre Day    1 年前

    谢谢-

    我最终和

    df %>% 
        pivot_longer(cols = jan:mar) %>% 
        pivot_wider(names_from = model, values_from = value)
    
      name      a     b     c     d     e
      <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
    1 jan       1     2     3     4     5
    2 feb       2     4     6     8    10
    3 mar       3     6     9    12    14