【问题标题】:Filter & Subset if a String Contains Certain Characters at specific position (in R)如果字符串在特定位置包含某些字符(在 R 中),则过滤和子集
【发布时间】:2025-11-29 19:00:01
【问题描述】:

如果数据框在 11-12 位置包含从 01 到 12 的任何数字,我目前希望对数据框进行子集化(如果我们还考虑 - 作为一个字符,那么该位置将是第 14-15 位)。我尝试了 grepl 但无法成功。

数据样本:

x <- data.table(c('ACCN-NJ-A55O-01A-11D-A25L-08','ACCN-NJ-A55O-11D-11D-A25L-08', 'ACCN-05-4249-01A-01D-1105-08', 'ACCN-S2-AA1A-15C-12D-A397-08'))

预期输出(将返回第 1、2 和 3 行):

ACCN-NJ-A55O-01A-11D-A25L-08
ACCN-NJ-A55O-11D-11D-A25L-08
ACCN-05-4249-01A-01D-1105-08

任何帮助将不胜感激。提前致谢

【问题讨论】:

  • @RonakShah 不,这是一个错误,我更新了问题并修改了您的代码 (

标签: r tidyverse subset tidyr grepl


【解决方案1】:

如果位置是固定的,你可以使用substr/substring在特定位置提取字符串。

subset(x, as.integer(substr(V1, 14, 15)) <= 12)

#                             V1
#1: ACCN-NJ-A55O-01A-11D-A25L-08
#2: ACCN-NJ-A55O-11D-11D-A25L-08
#3: ACCN-05-4249-01A-01D-1105-08

使用dplyr -

library(dplyr)
x %>% filter(between(as.integer(substr(V1, 14, 15)), 1, 12))

【讨论】:

    【解决方案2】:

    使用方括号子集:

    x[as.integer(substr(x$V1, 14, 15)) <= 12,]
    

    【讨论】:

      最近更新 更多