Определите, является ли 3-й ди git в строке 0 в R - PullRequest
3 голосов
/ 31 марта 2020

Попытка выяснить код, чтобы определить, является ли (3-й ди git в строке 0) или (3-й - 5, а 4-й - 6) и, похоже, ничего не может найти. Похоже на простую вещь, если бы я не искал конкретно c символьные числа / цифры.

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

Как я могу протестировать приведенный выше пример, где результаты будут FALSE FALSE TRUE?

Заранее спасибо!

Ответы [ 6 ]

3 голосов
/ 31 марта 2020

Мы можем использовать sub, чтобы захватить 3-ю и 4-ю цифры и проверить, равно ли оно 56

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

или substr

substr(x, 3,4) == 56
#[1] FALSE FALSE  TRUE
2 голосов
/ 31 марта 2020

Проверка, является ли 3-й ди git нулем

substr( c( "123456" , "124567" , "125600" , "30000" ) , 3,3) %in% 0
2 голосов
/ 31 марта 2020

Вместо выражения 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 
1 голос
/ 31 марта 2020

Мы можем использовать substring, чтобы получить символы из указанной c позиции.

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

Как вы уже объяснили, substring(x, 3, 3) == 0 проверяет, равен ли 3-й ди git 0 ИЛИ (|), 3-й и 4-й ди git substring(x, 3, 4) - 56 соответственно.

0 голосов
/ 31 марта 2020

Один способ сделать это для строк одинаковой длины.

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
0 голосов
/ 31 марта 2020

Проверьте, является ли

  • 3-й ди git 0, ИЛИ
  • 3-й ди git 5, а 4-й 6
x <- c( "123456" , "124567" , "125600", "120234")

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

# [1] FALSE FALSE  TRUE  TRUE
...