我有一大堆数据。我想根据一些模式识别来编辑它。 例如:
如果我有一封信,那么我想在之后打印那封信和一些额外的字符。
如果我有一些数字,我想在之后打印数字和一些其他字符。
如果我有一个独特的角色,比如" @" "#" " /"和/或":"然后我想用空格替换它。
如果我有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. 任何额外的帮助都很棒!
答案 0 :(得分:4)
您可以在grepl
和gsub
使用以下功能:
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"