使用多个列标题读取数据

时间:2019-09-09 10:24:43

标签: r dplyr tidyverse

我有一个带有2个列标题的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 个答案:

答案 0 :(得分:2)

不一定漂亮,但可以完成工作

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))