You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SAS数值格式目录导入R并基于起止变量生成新序列变量

把SAS数值格式目录导入R的解决方案

需要将SAS中按起始值-结束值组织的数值格式目录导入R,要求起止值之间的所有整数都映射到对应的目标值(可数字或字符),同时避免填充区间之间的空白数值(比如示例中10-13和15-15之间的14)。

示例数据集

fname <- c("aformat", "aformat", "aformat", "aformat", "aformat")
svalue <- c(1, 10, 15, 16, 30)
evalue <- c(2, 13, 15, 16, 35)
gvalue <- c("Berne", "Lucerne", "Zurich", "Chur", "Basel")

df <- data.frame(fname, svalue, evalue, gvalue)

失败的尝试(会填充区间间隙)

output <- df %>%
      group_by(fname) %>%
         complete(evalue = full_seq(min(svalue):max(evalue), 1)) %>%
            select(fname, evalue, gvalue) %>%
               fill(gvalue, .direction = "up")

正确解决方案

使用purrr::map2为每行的起止值生成对应的整数序列,再通过unnest展开,这样只会保留各区间内的数值,不会生成区间外的空白值:

library(dplyr)
library(tidyr)
library(purrr)

output <- df %>%
  group_by(fname) %>%
  # 为每行生成svalue到evalue的整数序列
  mutate(value = map2(svalue, evalue, seq)) %>%
  # 展开序列列
  unnest(value) %>%
  # 整理输出列
  select(fname, value, gvalue)

结果说明

运行后得到的output会包含以下对应关系:

  • 1、2 → Berne
  • 10、11、12、13 → Lucerne
  • 15 → Zurich
  • 16 → Chur
  • 30、31、32、33、34、35 → Basel

完全匹配SAS格式的映射规则,且不会出现14这类区间外的数值。

内容的提问来源于stack exchange,提问作者R_Vo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:50:07