如果字符串符合模式,则编辑R.

时间:2015-05-16 20:44:17

标签: regex r string expression

我有一大堆数据。我想根据一些模式识别来编辑它。 例如:

如果我有一封信,那么我想在之后打印那封信和一些额外的字符。

如果我有一些数字,我想在之后打印数字和一些其他字符。

如果我有一个独特的角色,比如" @" "#" " /"和/或":"然后我想用空格替换它。

如果我有n(n是9之类的数字)数字,那么n(n是数字)字符,那么我想打印我所拥有的数字,并在字符串的末尾添加一些字母或字符。

So let a data set be
data  output
F       F State
M       M State
R       R State
55      55 Object
53      53 Object
993M@L  99M L Object
93283M  93283M State0

我认为它类似于ifelse(如果有5个数字跟随1个字母,原始空间State0,NA)

我也想要NA,这样我就可以在我的数据中看到与我制定的规则不符的内容。

这是我第一次参与此研究,而我正在研究,但大部分资源都不适用于R. 任何额外的帮助都很棒!

1 个答案:

答案 0 :(得分:4)

您可以在greplgsub使用以下功能:

test<-function(str){
    if(grepl("^[A-Z]$", str, perl=TRUE)){
        gsub("^([A-Z])$", "\\1 State", str)
    }
    else if(grepl("^\\d+$", str, perl=TRUE)){
        gsub("^(\\d+)$", "\\1 Object", str)
    }
    else if(grepl("[@#/:]", str, perl=TRUE)){
        str<-gsub("[@#/:]", " ", str)
        paste(str," Object")
    }
    else if(grepl("^\\d+[A-Z]+$", str, perl=TRUE)){
        gsub("^(\\d+[A-Z]+)$", "\\1 State0", str)
    }
}

x<-"F"
x<-test(x)
print(x)        //output: "F State"

x<-"55"
x<-test(x)
print(x)        //output: "55 Object"

x<-"993M@L"
x<-test(x)
print(x)        //output: "993M L  Object"

x<-"93283M"
x<-test(x)
print(x)        //output: "93283M State0"