【问题标题】:How transform grouping variable to columns in R?如何将分组变量转换为 R 中的列?
【发布时间】:2021-01-13 23:18:42
【问题描述】:

我使用了以下数据集

data.frame(Group=c("A","A","A","B","B","B"),
           time= c("10:30","10:45","10:15","10:30","10:20","10:15"),
           value= c(1,2,3,1,5,6))

想得到下表

我尝试了 reshape2 包中的 dcast() 函数,但没有弄清楚如何根据时间和值变量拆分 Group 变量。你能帮忙吗?

【问题讨论】:

    标签: r


    【解决方案1】:
    library(reshape2)
    dcast(df, time + value ~ paste0("group", Group), value.var = "Group")
    
    #    time value groupA groupB
    # 1 10:15     3      A   <NA>
    # 2 10:15     6   <NA>      B
    # 3 10:20     5   <NA>      B
    # 4 10:30     1      A      B
    # 5 10:45     2      A   <NA>
    

    【讨论】:

      【解决方案2】:

      试试这个:

      library(dplyr)
      library(tidyr)
      #Code
      new <- df %>%
        mutate(Val=paste0('Group',Group)) %>%
        pivot_wider(names_from = Val,values_from=Group)
      

      输出:

      # A tibble: 5 x 4
        time  value GroupA GroupB
        <chr> <dbl> <chr>  <chr> 
      1 10:30     1 A      B     
      2 10:45     2 A      NA    
      3 10:15     3 A      NA    
      4 10:20     5 NA     B     
      5 10:15     6 NA     B  
      

      更新:使用新数据:

      #Code 2
      df %>%
        mutate(id=row_number(),
               Val=paste0('Group',Group)) %>%
        pivot_wider(names_from = Val,values_from=Group) %>% select(-id)
      

      输出:

      # A tibble: 7 x 4
        time  value GroupA GroupB
        <chr> <dbl> <chr>  <chr> 
      1 10:30     1 A      NA    
      2 10:30     1 A      NA    
      3 10:45     2 A      NA    
      4 10:15     3 A      NA    
      5 10:30     1 NA     B     
      6 10:20     5 NA     B     
      7 10:15     6 NA     B     
      

      【讨论】:

      • 是的,它正在工作。但是,如果在示例中重复每列的第一个值,我将在单元格内得到 list()。我怎样才能避免它(使用unique() 函数)。新数据集是data.frame(Group=c("A","A","A","A","B","B","B"), time= c("10:30","10:30","10:45","10:15","10:30","10:20","10:15"), value= c(1,1,2,3,1,5,6))
      • @ErkoTru 我已经更新了新数据,如果可行,请告诉我!
      【解决方案3】:

      使用reshape 的基本 R 选项

      reshape(
        transform(
          df,
          grpName = paste0("Group", Group)
        ),
        direction = "wide",
        idvar = c("time", "value"),
        timevar = "grpName"
      )
      

      给了

         time value Group.GroupA Group.GroupB
      1 10:30     1            A            B
      2 10:45     2            A         <NA>
      3 10:15     3            A         <NA>
      5 10:20     5         <NA>            B
      6 10:15     6         <NA>            B
      

      【讨论】:

        猜你喜欢
        • 2019-11-15
        • 2011-05-26
        • 2018-07-23
        • 2020-09-16
        • 2023-03-21
        • 2020-08-02
        • 2015-01-21
        • 2018-06-03
        • 1970-01-01
        相关资源
        最近更新 更多