我有一个带有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
答案 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))