Dear R People: Here is a toy example:> x <- c("2E","5W","12H") > substr(x,2,2)[1] "E" "W" "2">Sometimes x has 3 elements, sometimes 2. I want to extract the last element, and then extract the other 1 or 2 elements. How can I do this, please? TIA, Sincerely, Erin -- Erin Hodgess Associate Professor Department of Computer and Mathematical Sciences University of Houston - Downtown mailto: erinm.hodgess at gmail.com
## untested last <- tail(x, n = 1) first <- head(x, n = length(x) - 1) Erin Hodgess wrote:> Dear R People: > > Here is a toy example: > >> x <- c("2E","5W","12H") >> substr(x,2,2) > [1] "E" "W" "2" > > Sometimes x has 3 elements, sometimes 2. I want to extract the last > element, and then extract the other 1 or 2 elements. > > How can I do this, please? > > TIA, > Sincerely, > Erin > >
Upon re-reading your question, I did not provide what you wanted. In your example, 'x' is a character vector that has three elements. Each element of 'x' has two or three characters. Now I think I see what you want: ## untested, for the last character: substr(x, nchar(x), nchar(x)) ## untested, for the first character(s) substr(x, 1, ifelse(nchar(x) == 3, 2, 1)) Erin Hodgess wrote:> Dear R People: > > Here is a toy example: > >> x <- c("2E","5W","12H") >> substr(x,2,2) > [1] "E" "W" "2" > > Sometimes x has 3 elements, sometimes 2. I want to extract the last > element, and then extract the other 1 or 2 elements. > > How can I do this, please? > > TIA, > Sincerely, > Erin > >
Try this: library(gsubfn) ## The last character strapply(x, "(.)$", simplify = TRUE) ## The last two character strapply(x, "(..)$", simplify = TRUE) On Wed, Oct 29, 2008 at 6:57 PM, Erin Hodgess <erinm.hodgess@gmail.com>wrote:> Dear R People: > > Here is a toy example: > > > x <- c("2E","5W","12H") > > substr(x,2,2) > [1] "E" "W" "2" > > > > Sometimes x has 3 elements, sometimes 2. I want to extract the last > element, and then extract the other 1 or 2 elements. > > How can I do this, please? > > TIA, > Sincerely, > Erin > > > -- > Erin Hodgess > Associate Professor > Department of Computer and Mathematical Sciences > University of Houston - Downtown > mailto: erinm.hodgess@gmail.com > > ______________________________________________ > R-help@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 [[alternative HTML version deleted]]
How about> x <- c("2E","5W","12H") > substr(x, nchar(x), nchar(x))[1] "E" "W" "H"> > substr(x, 1, nchar(x)-1)[1] "2" "5" "12" -- David -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Erin Hodgess Sent: Wednesday, October 29, 2008 3:58 PM To: r-help at stat.math.ethz.ch Subject: [R] substring/strsplit question Dear R People: Here is a toy example:> x <- c("2E","5W","12H") > substr(x,2,2)[1] "E" "W" "2">Sometimes x has 3 elements, sometimes 2. I want to extract the last element, and then extract the other 1 or 2 elements. How can I do this, please? TIA, Sincerely, Erin -- Erin Hodgess Associate Professor Department of Computer and Mathematical Sciences University of Houston - Downtown mailto: erinm.hodgess at gmail.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.
on 10/29/2008 03:57 PM Erin Hodgess wrote:> Dear R People: > > Here is a toy example: > >> x <- c("2E","5W","12H") >> substr(x,2,2) > [1] "E" "W" "2" > > Sometimes x has 3 elements, sometimes 2. I want to extract the last > element, and then extract the other 1 or 2 elements. > > How can I do this, please? > > TIA, > Sincerely, > ErinHi Erin, Is this what you want? # Get the last character> gsub(".*(.)$", "\\1", x)[1] "E" "W" "H" # Get the others> gsub("(^.*).$", "\\1", x)[1] "2" "5" "12" See ?gsub HTH, Marc Schwartz
Assuming that by elements you mean characters ("2E" is the first
element of x but "E" is the last character in x[1]) then this will
create a character matrix of dimensions: length(x) by 2
such that each row corresponds to one component of x
and the second column in that row holds its last character
while the first column in that row holds a string of the prior
characters.
> x <- c("2E","5W","12H")
> library(gsubfn)
> strapply(x, "(.+)(.)$", c, simplify = rbind)
[,1] [,2]
[1,] "2" "E"
[2,] "5" "W"
[3,] "12" "H"
The above assumes the latest version of gsubfn
on CRAN.
On Wed, Oct 29, 2008 at 4:57 PM, Erin Hodgess <erinm.hodgess at gmail.com>
wrote:> Dear R People:
>
> Here is a toy example:
>
>> x <- c("2E","5W","12H")
>> substr(x,2,2)
> [1] "E" "W" "2"
>>
>
> Sometimes x has 3 elements, sometimes 2. I want to extract the last
> element, and then extract the other 1 or 2 elements.
>
> How can I do this, please?
>
> TIA,
> Sincerely,
> Erin
>
>
> --
> Erin Hodgess
> Associate Professor
> Department of Computer and Mathematical Sciences
> University of Houston - Downtown
> mailto: erinm.hodgess at gmail.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.
>