Skip to content

any function in R similar to the "scan" function in SAS?

7 messages · karena, Erik Iverson, Phil Spector +2 more

#
I am wondering if there is any function in R that is similar to the "scan"
function in SAS.
I have a data.frame which has two columns as the following:
one   two
1      2
3      4
5      6

I used the "paste" function to create the third column: three <-
paste(one,'-',two,sep="")
so the data.frame is like this now:
one   two   three
1      2       1-2
3      4       3-4
5      6       5-6

My question is, is there any function in R that can do the opposite thing to
what "paste" does?
suppose I only have the third column "three" now, and I want to get the
first and second columns. If in SAS, I can do the following:
one = scan(three,1,'-')
two = scan(three,-1,'-')

How can I do this in R?

thank you,

karena
#
karena wrote:
?strsplit
#
Karena -
    You can use strsplit combined with sapply to do what
you want:
[1] "1" "3" "5"
[1] "2" "4" "6"

You might want to use as.numeric to convert them back
to numbers, since SAS doesn't care about that particular
detail.
 					- Phil Spector
 					 Statistical Computing Facility
 					 Department of Statistics
 					 UC Berkeley
 					 spector at stat.berkeley.edu
On Wed, 5 May 2010, karena wrote:

            
#
You can read from a character vector as if it were a file like this:
one two
1   1   2
2   3   4
3   5   6
On Wed, May 5, 2010 at 12:45 PM, karena <dr.jzhou at gmail.com> wrote:
#
On May 5, 2010, at 9:17 PM, Gabor Grothendieck wrote:

            
So ... following Grothendieck's lead,  if you wanted to reverse that  
process and assuming your dataframe were named dtxt (and that column  
were text and not factor),  you could read right out of the data.frame:

 > read.table(textConnection(dtxt$three), sep = "-", col.names =  
c("one", "two"))
   one two
1   1   2
2   3   4
3   5   6

Or if you wanted those "appended" as columns:

 > cbind(dtxt, read.table(textConnection(dtxt$three), sep = "-",  
col.names = c("one", "two")) )
   one two three one two
1   1   2   1-2   1   2
2   3   4   3-4   3   4
3   5   6   5-6   5   6
David Winsemius, MD
West Hartford, CT