【问题标题】:R studio: use pivot_wider to pivot one column and reformat remaining columnsR studio:使用 pivot_wider 旋转一列并重新格式化剩余列
【发布时间】:2021-01-09 07:10:07
【问题描述】:

我有一个如下所示的数据框:

+---------+---------+------+------+
| Date    | Channel | Var1 | Var2 |
+---------+---------+------+------+
| 2020-01 | Disney  | 100  | 10   |
+---------+---------+------+------+
| 2020-02 | Disney  | 200  | 20   |
+---------+---------+------+------+
| 2020-03 | Disney  | 300  | 30   |
+---------+---------+------+------+
| 2020-04 | Disney  | 400  | 40   |
+---------+---------+------+------+
| 2020-05 | Disney  | 500  | 50   |
+---------+---------+------+------+
| 2020-06 | Disney  | 600  | 60   |
+---------+---------+------+------+
| 2020-07 | Disney  | 700  | 70   |
+---------+---------+------+------+
| 2020-08 | Disney  | 800  | 80   |
+---------+---------+------+------+
| 2020-09 | Disney  | 900  | 90   |
+---------+---------+------+------+
| 2020-10 | Disney  | 1000 | 100  |
+---------+---------+------+------+
| 2020-11 | Disney  | 1100 | 110  |
+---------+---------+------+------+
| 2020-12 | Disney  | 1200 | 120  |
+---------+---------+------+------+

我想将pivot_wider 应用于Date 列,以便数据框最终看起来像这样:

+---------+----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| Channel | Variable | 2020-01 | 2020-02 | 2020-03 | 2020-04 | 2020-05 | 2020-06 | 2020-07 | 2020-08 | 2020-09 | 2020-10 | 2020-11 | 2020-12 |
+---------+----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| Disney  | Var1     | 100     | 200     | 300     | 400     | 500     | 600     | 700     | 800     | 900     | 1000    | 1100    | 1200    |
+---------+----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+
| Disney  | Var2     | 10      | 20      | 30      | 40      | 50      | 60      | 70      | 80      | 90      | 100     | 110     | 12O     |
+---------+----------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+

我尝试过这样的事情:

data %>% pivot_wider(names_from = Date, values_from = c(Channel, Var1, Var2))

但它没有产生所需的数据输出。

我想知道使用 tidyverse 转换此表的优雅方法是什么?

非常感谢您的帮助!

【问题讨论】:

    标签: r dplyr pivot-table tidyverse


    【解决方案1】:

    在使用pivot_wider之前先获取长格式数据:

    library(tidyr)
    
    df %>%
      pivot_longer(cols = c(Var1, Var2)) %>%
      pivot_wider(names_from = Date, values_from = value)
    
    # A tibble: 2 x 14
    #   Channel name  `2020-01` `2020-02` `2020-03` `2020-04` `2020-05`
    #  <chr>   <chr>     <int>     <int>     <int>     <int>     <int>
    #1 Disney  Var1        100       200       300       400       500
    #2 Disney  Var2         10        20        30        40        50
    # … with 7 more variables: `2020-06` <int>, `2020-07` <int>,
    #   `2020-08` <int>, `2020-09` <int>, `2020-10` <int>, `2020-11` <int>,
    #   `2020-12` <int>
    

    你可以使用data.table

    library(data.table)
    
    dcast(melt(setDT(df), measure.vars = c("Var1", "Var2")), 
          Channel+variable~Date, value.var = 'value')
    

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 1970-01-01
      相关资源
      最近更新 更多