从R向量中的无小数的数字中删除前导零

时间:2016-03-09 06:44:24

标签: r

说我有一个向量myvec <- c("00890","0891","Apple-20","00-china-usa","0123Belgium")。 我想删除此向量中数值前的所有零,而不是字母数字,并获得如下所示的结果。

结果

"890", "891", "Apple-20","00-china-usa","0123Belgium"

3 个答案:

答案 0 :(得分:3)

你可以用gsub和正则表达式来做。将[1-9]括在括号中,您可以使用\\1

选择它以保留在输出中
gsub("^0+([1-9])","\\1",myvec)

编辑:实际上,从0123Belgium切割0,这有效:

ifelse(grepl("[A-z]",myvec),myvec,gsub("^0+([1-9])","\\1",myvec))

答案 1 :(得分:2)

我们可以使用sub执行此操作。我们将以{(1}})开头的字符串与一个或多个零后跟一个或多个数字(^)进行匹配,我们将其作为一组(即[0-9]+内)捕获直到结束(字符串(..))。在替换中,我们使用反向引用($)来替换捕获的组。请注意,这不会触及具有字符后缀的字符串中的前导0。在这个例子中是\\1

0123Belgium

或者使用sub("^0+([0-9]+)$", "\\1", myvec) #[1] "890" "891" "Apple-20" "00-china-usa" "0123Belgium" 仅匹配数字元素而不匹配任何字母。

^

使用其他sub("^0+([^[:alpha:]]+)$", "\\1", myvec) 进行测试,以检查此答案是否失败

vector

数据

sub("^0+([0-9]+)$", "\\1", myvec1) 
#[1] "8090"                "10"                  "00-china-012Belgium" "012C001"  

答案 2 :(得分:1)

另一种选择,我们可以将myvec中的元素转换为数字,并将字母数字中的元素保持不变。

ifelse(is.na(as.numeric(myvec)), myvec, as.numeric(myvec))

#[1] "890"          "891"          "Apple-20"     "00-china-usa" "0123Belgium" 
#Warning messages:
#1: In ifelse(is.na(as.numeric(myvec)), myvec, as.numeric(myvec)) :
#NAs introduced by coercion
#2: In ifelse(is.na(as.numeric(myvec)), myvec, as.numeric(myvec)) :
#NAs introduced by coercion