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

读取具有多个列标题的数据

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

    我有一个带有两列标题的csv文件,如下所示:

    tibble(brand_1 = c("region_1", 12, 4),
           brand_2 = c("region_1", 8, 10),
           brand_3 = c("region_2", 7, 12))
    
          brand_1  brand_2  brand_3 
          <chr>    <chr>    <chr>   
        1 region_1 region_1 region_2
        2 12       8        7       
        3 4        10       12  
    

    将其转换为长格式的最佳方式是什么,比如:

    # A tibble: 6 x 3
      brand   region   value
      <chr>   <chr>    <dbl>
    1 brand_1 region_1    12
    2 brand_1 region_1    14
    3 brand_2 region_1     8
    4 brand_2 region_1    10
    5 brand_3 region_2     7
    6 brand_3 region_2    12
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Maurits Evers    7 年前

    不一定漂亮,但它完成了任务

    library(tidyverse)
    df %>%
        magrittr::set_colnames(paste(names(.), .[1, ], sep = ";")) %>%
        filter(row_number() > 1) %>%
        gather(key, value) %>%
        separate(key, c("brand", "region"), sep = ";")
    ## A tibble: 6 x 3
    #  brand   region   value
    #  <chr>   <chr>    <chr>
    #1 brand_1 region_1 12
    #2 brand_1 region_1 4
    #3 brand_2 region_1 8
    #4 brand_2 region_1 10
    #5 brand_3 region_2 7
    #6 brand_3 region_2 12
    

    说明:这个想法是连接两个列标题,然后将数据从宽改为长,最后用 separate .


    样本数据

    df <- tibble(brand_1 = c("region_1", 12, 4),
           brand_2 = c("region_1", 8, 10),
           brand_3 = c("region_2", 7, 12))