不一定漂亮,但它完成了任务
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))