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

在R语言中判断字符串指定位置数字并生成新变量

解决根据字符串第7位生成新变量的问题

需求说明

针对包含9位数字字符串列Vectest的dataframe,生成新变量variable2:

  • 当Vectest第7位为1时,variable2赋值为1
  • 当第7位为2时,赋值为5
  • 当第7位为3时,赋值为6
  • 其他情况赋值为NA

示例数据与解决方案

方法1:使用grepl结合嵌套ifelse

按照你提到的grepl思路,通过正则表达式匹配第7位字符,结合ifelse完成赋值:

library(tidyverse)

# 构造示例数据
ID <- c(1,2,3,4,5,6)
Vectest <- c("830008100", "830056123", "830678309", "830008100", "830056123", "830678309")
data <- data.frame(ID, Vectest)

# 生成新变量
data <- data %>%
  mutate(variable2 = ifelse(grepl("^.{6}1", Vectest), 1,
                            ifelse(grepl("^.{6}2", Vectest), 5,
                                   ifelse(grepl("^.{6}3", Vectest), 6, NA))))

正则说明:^.{6}1表示从字符串开头起,匹配任意6个字符后紧跟1,即第7位为1;同理^.{6}2、^.{6}3分别匹配第7位为2、3的情况。

方法2:提取第7位后用case_when(更易读)

先通过substr直接提取第7位字符,再用case_when替代嵌套ifelse,代码可读性更强:

data <- data %>%
  mutate(
    # 提取第7位字符
    seventh_digit = substr(Vectest, 7, 7),
    # 按规则赋值
    variable2 = case_when(
      seventh_digit == "1" ~ 1,
      seventh_digit == "2" ~ 5,
      seventh_digit == "3" ~ 6,
      # 其他情况返回NA
      TRUE ~ NA_real_
    )
  ) %>%
  # 可选:删除中间生成的seventh_digit列
  select(-seventh_digit)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:45:35