Hi I have this vector of strings. MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") where I want to extract only the text after "I(" and before "^" so that the string returned only contain c("Test1","Test2","Test1.Test2") I am not very skilled in the use of matching patterns so bare with me but I belive I should use gsub('^.\\(', "",MyData) for removing the "I(" and gsub("\\^.+", '',MyData) for the end. but theres got to be a more elegant way that does the trick in one go. So I would appriciate I anyone could give me some advice. Thanks Tom -- View this message in context: http://www.nabble.com/Matching-Problem-tp15430660p15430660.html Sent from the R help mailing list archive at Nabble.com.
See this post: https://stat.ethz.ch/pipermail/r-help/2008-February/153819.html as well as the rest of that thread. On Feb 12, 2008 5:44 AM, Tom.O <tom.olsson at dnbnor.com> wrote:> > Hi > > I have this vector of strings. > > MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") > where I want to extract only the text after "I(" and before "^" so that the > string returned only contain c("Test1","Test2","Test1.Test2") > > I am not very skilled in the use of matching patterns so bare with me but I > belive I should use gsub('^.\\(', "",MyData) for removing the "I(" and > gsub("\\^.+", '',MyData) for the end. but theres got to be a more elegant > way that does the trick in one go. > > So I would appriciate I anyone could give me some advice. > > Thanks Tom > -- > View this message in context: http://www.nabble.com/Matching-Problem-tp15430660p15430660.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >
Maybe: all.vars(parse(text=paste(MyData, collapse="+"))) On 12/02/2008, Tom.O <tom.olsson at dnbnor.com> wrote:> > Hi > > I have this vector of strings. > > MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") > where I want to extract only the text after "I(" and before "^" so that the > string returned only contain c("Test1","Test2","Test1.Test2") > > I am not very skilled in the use of matching patterns so bare with me but I > belive I should use gsub('^.\\(', "",MyData) for removing the "I(" and > gsub("\\^.+", '',MyData) for the end. but theres got to be a more elegant > way that does the trick in one go. > > So I would appriciate I anyone could give me some advice. > > Thanks Tom > -- > View this message in context: http://www.nabble.com/Matching-Problem-tp15430660p15430660.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Henrique Dallazuanna Curitiba-Paran?-Brasil 25? 25' 40" S 49? 16' 22" O
unique(gsub("^.*\\((.+)\\^.*", "\\1", MyData)) ? b On Feb 12, 2008, at 5:44 AM, Tom.O wrote:> > Hi > > I have this vector of strings. > > MyData <- > c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") > where I want to extract only the text after "I(" and before "^" so > that the > string returned only contain c("Test1","Test2","Test1.Test2") > > I am not very skilled in the use of matching patterns so bare with > me but I > belive I should use gsub('^.\\(', "",MyData) for removing the "I(" and > gsub("\\^.+", '',MyData) for the end. but theres got to be a more > elegant > way that does the trick in one go. > > So I would appriciate I anyone could give me some advice. > > Thanks Tom > -- > View this message in context: http://www.nabble.com/Matching-Problem-tp15430660p15430660.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
A way to do it is to use groups (in perl terminology) in connection with regular expressions. My (limited) understanding of it is as follows: Consider> s <-"BBBiiiiEEEeeeeFFFF" > gsub("BBB(.*)EEE(.*)FFFF", "\\1AAA\\2\\", s)[1] "iiiiAAAeeee">The terms in the parentheses are groups which you can refer to with \\1 \\2 etc in the replacement string. So, a solution to your problem could be:> MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") > gsub("^I\\((.*)\\^.+", "\\1\\", MyData)[1] "Test1" "Test2" "Test1" "Test2" "Test1.Test2" Now use unique on the result. Regards S?ren ________________________________ Fra: r-help-bounces at r-project.org p? vegne af Tom.O Sendt: ti 12-02-2008 11:44 Til: r-help at r-project.org Emne: [R] Matching Problem Hi I have this vector of strings. MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") where I want to extract only the text after "I(" and before "^" so that the string returned only contain c("Test1","Test2","Test1.Test2") I am not very skilled in the use of matching patterns so bare with me but I belive I should use gsub('^.\\(', "",MyData) for removing the "I(" and gsub("\\^.+", '',MyData) for the end. but theres got to be a more elegant way that does the trick in one go. So I would appriciate I anyone could give me some advice. Thanks Tom -- View this message in context: http://www.nabble.com/Matching-Problem-tp15430660p15430660.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Here is one way of doing it:> MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") > x <- gsub("^(.*\\(|)([^^)]*|.*).*", "\\2", MyData) > x[1] "Test1" "Test2" "Test1" "Test2" "Test1.Test2"> unique(x)[1] "Test1" "Test2" "Test1.Test2">On Feb 12, 2008 5:44 AM, Tom.O <tom.olsson at dnbnor.com> wrote:> > Hi > > I have this vector of strings. > > MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") > where I want to extract only the text after "I(" and before "^" so that the > string returned only contain c("Test1","Test2","Test1.Test2") > > I am not very skilled in the use of matching patterns so bare with me but I > belive I should use gsub('^.\\(', "",MyData) for removing the "I(" and > gsub("\\^.+", '',MyData) for the end. but theres got to be a more elegant > way that does the trick in one go. > > So I would appriciate I anyone could give me some advice. > > Thanks Tom > -- > View this message in context: http://www.nabble.com/Matching-Problem-tp15430660p15430660.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve?
> sub("^I\\((.*)\\^.*$", "\\1", MyData)[1] "Test1" "Test2" "Test1" "Test2" "Test1.Test2" In this case, there is a simple way of discovering which variable names are present, though> all.vars(parse(text = MyData))[1] "Test1" "Test2" "Test1.Test2" Bill Venables CSIRO Laboratories PO Box 120, Cleveland, 4163 AUSTRALIA Office Phone (email preferred): +61 7 3826 7251 Fax (if absolutely necessary): +61 7 3826 7304 Mobile: +61 4 8819 4402 Home Phone: +61 7 3286 7700 mailto:Bill.Venables at csiro.au http://www.cmis.csiro.au/bill.venables/ -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Tom.O Sent: Tuesday, 12 February 2008 8:44 PM To: r-help at r-project.org Subject: [R] Matching Problem Hi I have this vector of strings. MyData <- c("Test1","Test2","I(Test1^2)","I(Test2^3)","I(Test1.Test2^2)") where I want to extract only the text after "I(" and before "^" so that the string returned only contain c("Test1","Test2","Test1.Test2") I am not very skilled in the use of matching patterns so bare with me but I belive I should use gsub('^.\\(', "",MyData) for removing the "I(" and gsub("\\^.+", '',MyData) for the end. but theres got to be a more elegant way that does the trick in one go. So I would appriciate I anyone could give me some advice. Thanks Tom -- View this message in context: http://www.nabble.com/Matching-Problem-tp15430660p15430660.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.