我首先参考了这个问题,但答案并没有帮助到我的情况。
我有一个列表,其中每个组件都包含以数字开头,后跟单词(字符)的元素。一些以数字开头的元素具有一个或多个前导零。以下是列表的一小部分:
x <- list(el1 = c("0010 First",
"0200 Second",
"0300 Third",
"4000 Fourth",
"0 Undefined",
"60838 Random",
"903200 Haphazard"),
el2 = c("0100 Hundredth",
"0200 Two hundredth",
"0300 Three hundredth",
"0040 Fortieth",
"0 Undefined",
"949848 Random",
"202626 Haphazard"),
el3 = c("0010 First",
"0200 Second",
"0300 Third",
"0100 Hundredth",
"0200 Two hundredth",
"0300 Three hundredth",
"0 Undefined",
"60838 Random",
"20200 Haphazard"))
我想要实现的是,将所有可以去除前导零的元素中的前导零去掉,而在0 Undefined
开头保留单个零,并保留所有其他不以前导零开头的元素。也就是说,将列表调整为以下形式:
x <- list(el1 = c("10 First",
"200 Second",
"300 Third",
"4000 Fourth",
"0 Undefined",
"60838 Random",
"903200 Haphazard"),
el2 = c("100 Hundredth",
"200 Two hundredth",
"300 Three hundredth",
"40 Fortieth",
"0 Undefined",
"949848 Random",
"202626 Haphazard"),
el3 = c("10 First",
"200 Second",
"300 Third",
"100 Hundredth",
"200 Two hundredth",
"300 Three hundredth",
"0 Undefined",
"60838 Random",
"20200 Haphazard"))
我已经尝试了几个小时,但仍然没有成功。我所能做到的最好的就是这个:
lapply(x, function(i) {
ifelse(grep(pattern = "^0+[1-9]", x = i),
gsub(pattern = "^0+", replacement = "", x = i), i)
})
然而,它只返回那些列表组件中有前导零的元素,但不包括其余没有前导零也没有“
0 Undefined
”的元素。有人可以帮忙吗?
perl=TRUE
参数,因为不是必需的。lapply(x, function(y) sub('^0+([1-9])', '\\1', y))
- hwndfunction(i)
一样。 - akrunlapply(x, sub, pattern='^0+([1-9])', replacement='\\1')
。 - akrun