[R] using (g)sub for efficient string handling (was Re: transforming one column into 2 columns)
Benilton Carvalho
bcarvalh at jhsph.edu
Sat Feb 2 19:40:03 CET 2008
That actually reminds me of a problem I had to tackle a while ago.
Say I have the following:
txt <- c("Variation_0001 // chr1:1083805-1283805 // Array CGH //
15286789 // Iafrate et al. (2004) // CopyNumber /// Variation_5452 //
chr1:1142956-1147823 // Computational mapping of resequencing
traces // 16902084 // Mills et al. (2006) // CopyNumber",
"Variation_4192 // chr1:2062347-2242269 // Array CGH // 17160897 //
Wong et al. (2007) // CopyNumber /// Variation_4193 //
chr1:2145626-2314237 // Array CGH // 17160897 // Wong et al. (2007) //
CopyNumber /// Variation_8246 // chr1:2224111-3755284 // Affymetrix
500K and 100K SNP Mapping Arrays // 17638019 // Zogopoulos et al.
(2007) // CopyNumber", "Variation_8246 // chr1:2224111-3755284 //
Affymetrix 500K and 100K SNP Mapping Arrays // 17638019 // Zogopoulos
et al. (2007) // CopyNumber")
For each record, I'm interested in keeping the following:
results <- c("Variation_0001;Variation_5452",
"Variation_4192;Variation_4193;Variation_8246", "Variation_8246")
My solution was:
theNames <- function(tmp)
sapply(strsplit(tmp, " /+ "),
function(y)
paste(y[grep("Variation_", y)],
collapse=";"))
But my wish was to know the regular expression that I needed to select
everything but "Variation_\\d+"... For example, something like:
gsub( NOT "Variation_\\d+", ";", txt, perl=TRUE)
Suggestions?
b
On Feb 2, 2008, at 1:03 PM, Peter Dalgaard wrote:
> Benilton Carvalho wrote:
>> help("strsplit")
>> b
>>
> Yes, but...
>
> The postprocessing gets a bit awkward. It might be easier to use
> sub() to get rid of the first/last bit of the string i.e.
>
> C2 <- sub("^.*:", "", Col)
> C1 <- sub(":.*$", "", Col)
>
> An orthogonal idea is
>
> con <- textConnection("Col")
> read.table(con, sep=":")
> close(con)
>
>> On Feb 2, 2008, at 12:43 PM, joseph wrote:
>>
>>>
>>>
>>> Hello
>>>
>>> I have a data frame and one of its columns is as follows:
>>>
>>>
>>>
>>>
>>> Col
>>>
>>>
>>> chr1:71310034
>>>
>>>
>>>
>>> chr15:37759058
>>>
>>>
>>> chr22:18262638
>>>
>>>
>>> chrUn:31337214
>>>
>>>
>>> chr10_random:4369261
>>>
>>>
>>> chrUn:3545097
>>>
>>>
>>>
>>>
>>>
>>> I would like to get rid of colon (:) and replace this column
>>> with two new columns containing the terms on each side of the
>>> colon. The new columns
>>> should look as follows:
>>>
>>>
>>>
>>>
>>> Col_a Col_b
>>>
>>>
>>> chr1 71310034
>>>
>>>
>>> chr14 23354088
>>>
>>>
>>> chr15 37759058
>>>
>>>
>>> chr22 18262638
>>>
>>>
>>> chrUn 31337214
>>>
>>>
>>> chr10_random 4369261
>>>
>>>
>>> chrUn 3545097
>>>
>>>
>>>
>>>
>>>
>>> Any help will be much appreciated
>>>
>>>
>>> Joseph
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> ____________________________________________________________________________________
>>> Looking for last minute shopping deals?
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> 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.
>>
>> ------------------------------------------------------------------------
>>
>> ______________________________________________
>> 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.
>>
>
>
> --
> O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B
> c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
> (*) \(*) -- University of Copenhagen Denmark Ph: (+45)
> 35327918
> ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45)
> 35327907
>
More information about the R-help
mailing list