在不同条件下从字符串中提取

时间:2014-04-18 14:40:12

标签: r

我正在尝试仅从字符串中提取字符和数字。因为这些位置各不相同,所以我不能使用依赖于值的位置的语法。

例如,假设我有以下列x,其中值重复,但具有不同的数字:

x <- c("dummy.DR57", "dummy.hour41", "dummy.MAV43", "dummy.SB1")

我想创建两列: 1:只有“。”后面的字符的列。但在数字之前:

name <- c("DR", "hour", "MAV", "SB")

2:只有数字的列:

number <- c("57", "41", "43", "1")

我大部分都在尝试使用substr和str_sub - 但是我没有得到我需要的结果。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

> gsub(x, pattern = '[0-9]|dummy\\.', replacement = '')
[1] "DR"   "hour" "MAV"  "SB"  
> gsub(x, pattern = '[a-zA-Z]|\\.', replacement = '')
[1] "57" "41" "43" "1" 

答案 1 :(得分:0)

x <- c("dummy.DR57", "dummy.hour41", "dummy.MAV43", "dummy.SB1")

(number <- gsub('[[:alpha:]].', '', x))
# [1] "57" "41" "3"  "1" 

(name <- gsub("[^.]*[.]|[[:digit:]]", "", x))
# [1] "DR"   "hour" "MAV"  "SB" 

答案 2 :(得分:0)

你可以试试这个:

gsub(pattern = "(^.*\\.)([[:alpha:]]+)([[:digit:]]+)",
     replacement = "\\2",
     x = x)
# [1] "DR"   "hour" "MAV"  "SB"

gsub(pattern = "(^.*\\.)([[:alpha:]]+)([[:digit:]]+)",
     replacement = "\\3",
     x = x)
# [1] "57" "41" "43" "1"