如果字符串在特定位置包含某些字符(在 R 中),则进行过滤和子集化
Filter & Subset if a String Contains Certain Characters at specific position (in R)
如果数据框在 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
如有任何帮助,我们将不胜感激。提前致谢
如果位置固定,可以使用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))
使用方括号子集:
x[as.integer(substr(x$V1, 14, 15)) <= 12,]
如果数据框在 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
如有任何帮助,我们将不胜感激。提前致谢
如果位置固定,可以使用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))
使用方括号子集:
x[as.integer(substr(x$V1, 14, 15)) <= 12,]