Как убрать второе слева (2) и пятое справа (0) в следующем числе в R? Например: 3255103161 - PullRequest
0 голосов
/ 06 июля 2018

Как убрать второе слева (2) и пятое справа (0) в следующем числе в R? Например: 3255103161.

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Мы можем использовать strsplit, чтобы разбить номер на отдельные цифры и удалить цифры по мере необходимости.

val <- 3255103161

rmv <- c(2, nchar(val) - 4);   # Remove 2nd from left, 5th from right
paste0(unlist(strsplit(as.character(val), ""))[-rmv], collapse = "")
#[1] "35513161"

Конвертировать в integer с

as.integer(paste0(unlist(strsplit(as.character(val), ""))[-rmv], collapse = ""))
#[1] 35513161
0 голосов
/ 06 июля 2018

Мы можем просто использовать sub, чтобы удалить 0

sub("0", "", 3255103161)
#[1] "325513161"

Если это основано на позиции

sub("0(.{4})$", "\\1", 3255103161)
#[1] "325513161"

Для удаления цифр с обоих концов

sub("^(.).(.*)0(.{4})$", "\\1\\2\\3", 3255103161)
#[1] "35513161"
0 голосов
/ 06 июля 2018

Вы можете использовать регулярное выражение для просмотра позади (?<=^\\d{1}), чтобы сопоставить число, которому предшествует только одна цифра, чтобы удалить два, а также для соответствия пятой позиции с последней, вы используете предварительный просмотр (?=.{5}$)\\d

 gsub("(?<=^\\d{1})\\d|(?=.{5}$)\\d","",3255103161,perl = T)
[1] "35513161"

Если вы хотите это как число, вы можете сделать:

as.numeric(gsub("(?<=^\\d{1})\\d|(?=.{5}$)\\d","",3255103161,perl = T))
[1] 35513161

Также вы можете сделать:

a = 3255103161
pos=c(2,nchar(a)-4)
attr(pos,"match.length")=rep(1,length(pos))
regmatches(a, list(pos)) <- ""
a
[1] "35513161"

ИЛИ ВЫ МОЖЕТЕ СДЕЛАТЬ:

a = 3255103161
`regmatches<-`(a,list(`attr<-`(pos,"match.length",rep(1,length(pos)))),value="")
 [1] "35513161"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...