您可以定义子类别值(
cat_value
subcategory
). 将子类别值更改为
NA
和使用
tidyr::fill
category
library(dplyr)
cat_value <- c('high', 'mid', 'low')
df %>%
mutate(subcategory = replace(category, !category %in% cat_value, NA) ,
category = replace(category, category %in% cat_value, NA)) %>%
tidyr::fill(category) %>%
filter(!is.na(subcategory)) %>%
select(category, subcategory, value)
# category subcategory value
#1 A high 20
#2 A mid 18
#3 A low 10
#4 B high 22
#5 B mid 12
#6 B low 11
#7 C low 14
数据
df <- structure(list(category = c("A", "high", "mid", "low", "B", "high",
"mid", "low", "C", "low"), value = c(NA, 20L, 18L, 10L, NA, 22L,
12L, 11L, NA, 14L)), class = "data.frame", row.names = c(NA, -10L))