我有一个向量
myVec <- c('1.2','asd','gkd','232','4343','1.3zyz','fva','3213','1232','dasd')
在这个向量中,我想做两件事:
- 从包含数字和字母的元素中删除任何数字,然后
- 如果一组字母后面跟着另一组字母,将它们合并为一个。
所以上面的向量看起来像这样:
'1.2','asdgkd','232','4343','zyzfva','3213','1232','dasd'
我想我会首先找到字母数字元素并使用 gsub 从中删除数字。 这个我试过了
gsub('[0-9]+', '', myVec[grepl("[A-Za-z]+$", myVec, perl = T)])
"asd" "gkd" ".zyz" "fva" "dasd"
即它保留了我不想要的 .
。
最佳答案
这似乎返回了你想要的东西
myVec <- c('1.2','asd','gkd','232','4343','1.3zyz','fva','3213','1232','dasd')
clean <- function (x) {
is_char <- grepl("[[:alpha:]]", x)
has_number <- grepl("\\d", x)
mixed <- is_char & has_number
x[mixed] <- gsub("[\\d\\.]+","", x[mixed], perl=T)
grp <- cumsum(!is_char | (is_char & !c(FALSE, head(is_char, -1))))
unname(tapply(x, grp, paste, collapse=""))
}
clean(myVec)
# [1] "1.2" "asdgkd" "232" "4343" "zyzfva" "3213" "1232" "dasd"
这里我们寻找混合在一起的数字和字母并删除数字。然后我们定义了用于折叠的组,寻找在其他字符之后出现的字符以将它们放在同一组中。然后我们最终折叠同一组中的所有值。
关于r - 在向量中查找字母数字元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804816/