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

如何为每个科目生成唯一ID?应使用何种库及case_when()是否适用?

问题解答

原始数据

Subject codeName
401John
422Mary
463Peter

目标结果

IDSubject codeName
S01401John
S22422Mary
S63463Peter

适用库

用R语言的话,tidyverse套件就足够,核心用到dplyr(数据处理)和stringr(字符串操作)两个包。

实现方法

完全不需要用case_when(),你的需求是统一规则的字符串提取与格式化,用字符串处理函数更高效直接:

  • 先把Subject code转成字符型,提取后两位;
  • 补前导零(确保单数字的情况也能得到两位格式,比如41变成01);
  • 拼接前缀"S"生成最终ID。

示例代码:

library(tidyverse)

# 构造原始数据框
df <- tibble(
  Subject_code = c(401, 422, 463),
  Name = c("John", "Mary", "Peter")
)

# 生成ID列
df <- df %>%
  mutate(
    # 方法1:用stringr系列函数
    ID = str_c("S", str_pad(str_sub(as.character(Subject_code), -2), 2, side = "left", pad = "0")),
    # 方法2:用sprintf格式化(更简洁)
    # ID = sprintf("S%02d", as.integer(str_sub(as.character(Subject_code), -2)))
  )

关于case_when()的适用性

case_when()是用来处理多条件分支场景的,比如不同区间的Subject code要对应不同的ID生成规则。但你的需求是所有行都遵循同一规则,用它反而会把简单问题搞复杂——你得给每个Subject code单独写分支,完全没必要。只有后续ID规则出现差异化分支时,才需要考虑用它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:15:57