确定字符串中的第 3 位数字是否为 R 中的 0

Determine if 3rd digit in string is 0 in R

试图找出代码来确定(字符串中的第 3 个数字是 0)还是(第 3 个是 5,第 4 个是 6),但似乎找不到任何东西。如果我不是专门寻找特定字符 numbers/digits.

,感觉就像一件简单的事情
x <- c( "123456" , "124567" , "125600" )

我如何测试上面的例子,结果是 FALSE FALSE TRUE?

提前致谢!

我们可以用sub截取第3位和第4位数字,判断是否等于56

sub("^..(..).*", "\1", x) == 56
#[1] FALSE FALSE  TRUE

或者用substr

substr(x, 3,4) == 56
#[1] FALSE FALSE  TRUE

替代regex表达式,您可以使用strsplit

x <- c( "123456" , "124567" , "125600","120156" )

sapply(x,function(v) unlist(strsplit(v,""))[3] ==0)

123456 124567 125600 120156 
 FALSE  FALSE  FALSE   TRUE 

sapply(x,function(v) unlist(strsplit(v,""))[4:5] == c(5,6))
     123456 124567 125600 120156
[1,]  FALSE   TRUE  FALSE  FALSE
[2,]  FALSE   TRUE  FALSE  FALSE

# Or with the correct order:
sapply(x,function(v) paste0(unlist(strsplit(v,""))[3:4],collapse = "") == 56)
123456 124567 125600 120156 
 FALSE  FALSE   TRUE  FALSE 

测试第三位数字是否为零

substr( c( "123456" , "124567" , "125600" , "30000" ) , 3,3) %in% 0

检查是否

  • 第 3 位为 0,或
  • 第 3 个数字是 5,第 4 个数字是 6
x <- c( "123456" , "124567" , "125600", "120234")

sub("^..((0|56)).*","\1",x) %in% c(0,56)

# [1] FALSE FALSE  TRUE  TRUE

对等长字符串执行此操作的一种方法。

x <- c( "123456" , "124567" , "125600" )
x <- as.data.frame(strsplit(x, ""), stringsAsFactors = FALSE, fix.empty.names = FALSE)
x[3,] %in% 3   # [1]  TRUE FALSE FALSE
x[3,] %in% 0   # [1] FALSE FALSE FALSE
x[4,] %in% 6   # [1] FALSE FALSE  TRUE

不等长字符串

x <- c( "123456" , "124567" , "1256000" )
x <- strsplit(x, "")
x <- sapply(x, "[", i = seq_len(max(lengths(x))))
x[3,] %in% 3   # [1]  TRUE FALSE FALSE
x[3,] %in% 0   # [1] FALSE FALSE FALSE
x[4,] %in% 6   # [1] FALSE FALSE  TRUE

我们可以使用substring从特定位置获取字符。

substring(x, 3, 3) == 0 | substring(x, 3, 4) == 56
#[1] FALSE FALSE  TRUE

正如您所解释的,substring(x, 3, 3) == 0 检查第 3 位数字是否为 0 或 (|) 第 3 和第 4 位数字 substring(x, 3, 4) 是否分别为 56