我有如下的字符串数据。
a <- c("53H", "H26","14M","M47")
##"53H" "H26" "14M" "M47"
我想以某种顺序修复数字和字母 数字排在第一位,字母排在第二位,反之亦然。 我该怎么办?
##"53H" "26H" "14M" "47M"
或
##"H53" "H26" "M14" "M47"
答案 0 :(得分:12)
您可以使用gsub
分别提取数字和字母,然后使用paste0
把它们按照你喜欢的顺序排列。
a <- c("53H", "H26","14M","M47")
( nums <- gsub("[^0-9]", "", a) ) ## extract numbers
# [1] "53" "26" "14" "47"
( lets <- gsub("[^A-Z]", "", a) ) ## extract letters
# [1] "H" "H" "M" "M"
数字第一个回答:
paste0(nums, lets)
# [1] "53H" "26H" "14M" "47M"
来信第一次回答:
paste0(lets, nums)
# [1] "H53" "H26" "M14" "M47"
答案 1 :(得分:6)
您可以使用()
在群组中捕获相关部分,然后使用gsub
对其进行反向引用:
a <- c("53H", "H26","14M","M47")
gsub("^([0-9]+)([A-Z]+)$", "\\2\\1", a)
# [1] "H53" "H26" "M14" "M47"
这就像是说“在我的字符串开头找一组数字并将它们捕获到一个组中(^([0-9]+)
)。然后找到一组字母,这些字母会一直显示在我的字符串末尾并捕获他们在第二组(([A-Z]+)
)。这是我的搜索模式。接下来,替换它,使得第一组(由\\2
引用)首先返回第一组(由{{引用) 1}})返回第二个。)
答案 2 :(得分:2)
根据Ananda Mahto的回答,您可以使用以下代码先订购号码和第二个号码:
gsub("^([A-Z]+)([0-9]+)$", "\\2\\1", a)
因为您要捕获以字母(^([A-Z]+)
)开头的字符串,然后捕获数字组(([0-9]+)$
)/