首页 > 解决方案 > 使用带状变量扩展行

问题描述

我正在尝试使用带状变量扩展行。下面是输入数据和所需的输出数据。基本上想使用吨位来扩展我的行,在输入数据集中有更宽的宽度。

我尝试使用 expand.grid 和 splitstackshape 但无法继续。请帮忙。

在此处输入图像描述

在此处输入图像描述

标签: rdplyr

解决方案


这是一个建议。我编写了一个带有三个参数的函数:start、end 和 cutoffs。然后,逐行运行此函数。关键是用来cut()为波段生成字符串。

library(tidyverse)
dat <- data.frame(key = c("FDE", "GED"), tonnage = c("0-40", "7.5-40"))

split_numbers <- function(start, end, cutoffs) {
  cutoffs <- cutoffs[between(cutoffs, start, end)]
  
  cut(1, cutoffs) %>% 
    levels() %>% 
    str_remove_all("\\(|\\]") %>% 
    str_replace(",", "-") %>% 
    c(paste0(end, "+"))
}

dat %>% 
  separate(tonnage, c("start", "end"), sep = "-") %>% 
  group_by(key) %>% 
  summarise(
    tonnage_split = list(split_numbers(start, end, c(0, 7.5, 12, 20, 40)))
  ) %>% 
  unnest(tonnage_split)

# # A tibble: 9 x 2
#   key   tonnage_split
#   <chr> <chr>        
# 1 FDE   0-7.5        
# 2 FDE   7.5-12       
# 3 FDE   12-20        
# 4 FDE   20-40        
# 5 FDE   40+          
# 6 GED   7.5-12       
# 7 GED   12-20        
# 8 GED   20-40        
# 9 GED   40+     

推荐阅读