代码之家  ›  专栏  ›  技术社区  ›  user3570187

在R中将多行数据格式化为单行

  •  0
  • user3570187  · 技术社区  · 7 年前

    我是一个奇怪的excel或csv格式的文件,我想把它作为数据帧导入r。问题是有些列有多行记录,例如,数据如下:有三列两行,但是工具列有多列,有没有一种方法可以格式化数据,这样我只有多个工具记录(如tool1、tool2等)

    Task             Location  Tools 
    Raising ticket   Alabama   sharepoint
                               word
                               oracle
    Changing ticket  Seattle   word 
                               oracle
    

    预期最终输出

    Task             Location  Tools1   Tools2  Tools3
    Raising ticket   Alabama   sharepoint   word    oracle
    Changing ticket  Seattle   word         oracle
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   jasbner    7 年前

    dplyr tidyr . 你可以 fill 使任务和位置包含在每一行中的数据帧。然后 group_by 任务和 mutate 为每个组中的每个任务添加一个ID列。然后使用 spread 将新创建的ID列分布在多个列中。

    library(dplyr)
    library(tidyr)
    df <- data.frame(Task = c("Raising ticket","","","Changing ticket",""), Location = c("Alabama","","","Seattle",""), Tools = c("sharepoint","word","oracle","word","oracle"))
    df[df==""]  <- NA
    df %>%
      fill(Task,Location) %>%
      group_by(Task) %>%
      mutate(id = paste0("Tools",row_number())) %>%
      spread(id, Tools)
    
    # A tibble: 2 x 5
    # Groups: Task [2]
    #  Task            Location Tools1     Tools2 Tools3
    #   <fct>           <fct>    <fct>      <fct>  <fct> 
    # 1 Changing ticket Seattle  word       oracle <NA>  
    # 2 Raising ticket  Alabama  sharepoint word   oracle