代码之家  ›  专栏  ›  技术社区  ›  Lucca Nielsen

具有两个值的数据透视加宽器

  •  0
  • Lucca Nielsen  · 技术社区  · 3 年前

    好吧,让我来解释一下我想要实现的目标。

    我有一个 data.frame 就像这样:

    enter image description here

    我试图使用pivot_wider来保持每行一个ID,并像这样分布其他列:

    enter image description here

    我和 pivot_wider , values_from 论点有硬汉吗?

    这是我的例子df

    df<- data.frame(ID = c(1,1,2,2,3,3),
               category = c("A","B","A","C","A","C"),
               date = c(Sys.Date(), Sys.Date()-10, Sys.Date(), 
                        Sys.Date()-10, Sys.Date(), Sys.Date()-10))
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   akrun    3 年前

    按“ID”创建行序列,将序列列用作 names_from values_from 作为 pivot_wider

    library(dplyr)
    library(data.table)
    library(tidyr)
    df %>%
       mutate(rn = rowid(ID)) %>%
       pivot_wider(names_from = rn, values_from = c(category, date), names_sep = "")
    

    -输出

    # A tibble: 3 × 5
         ID category1 category2 date1      date2     
      <dbl> <chr>     <chr>     <date>     <date>    
    1     1 A         B         2022-09-06 2022-08-27
    2     2 A         C         2022-09-06 2022-08-27
    3     3 A         C         2022-09-06 2022-08-27
    

    或使用 row_number() 分组后创建序列列

    df %>%
       group_by(ID) %>%
       mutate(rn = row_number()) %>%
       ungroup %>%
       pivot_wider(names_from = rn, values_from = c(category, date), names_sep = "")