[R] Add columns in a dataframe and fill them from another table according to a criteria
John Kane
jrkrideau at yahoo.ca
Sun Aug 2 19:53:54 CEST 2009
I'm still not sure that I understand what you are looking for. However building on David Winsemius does this give you what you want?
#======================================================================
pstate<-read.table(textConnection("Changes State1 State2 State3 State4
a Pa1 Pa2 Pa3 Pa4
b Pb1 Pb2 Pb3 Pb4
c Pc1 Pc2 Pc3 Pc4
d Pd1 Pd2 Pd3 Pd4"),header=TRUE,as.is=TRUE)
Change<-c("b","a","b","c","d","a")
state<-c("State1","State4","State2","State3","State1","State3")
mydata4<-data.frame(Change,state)
dd <- data.frame(Change=pstate[,1],
prstate =stack(pstate[2:5])$values,
state=stack(pstate[2:5])$ind )
# merge(mydata4, dd, by=c("Change", "state"))
=======================================================
--- On Sat, 8/1/09, Meenu Sahi <meenusahi at gmail.com> wrote:
> From: Meenu Sahi <meenusahi at gmail.com>
> Subject: Re: [R] Add columns in a dataframe and fill them from another table according to a criteria
> To: "David Winsemius" <dwinsemius at comcast.net>
> Cc: "R" <r-help at r-project.org>, jrkrideau at yahoo.ca
> Received: Saturday, August 1, 2009, 1:43 PM
> Dear R users
> My apologizes for not writing in the correct format
> due to my ignorance. In the future I will write more
> clearly. I hope to contribute to the R community in the
> process of picking up the language professionally.
>
> I have now written the R code which is attached in a
> notepad file. I've simplified my problem in an example
> of, table pstate which contains the probabilities of getting
> certain changes in the four different states and a dataframe
> mydata4 which contains all the changes connected to the four
> different states. I would like to add the probabilities into
> mydata4 after matching for the change and the state.
>
> Everything before ##### output can be copy pasted in
> the R window. The desired output is written after
> ###### OUTPUT
> Must I write an if else or can I do it in an easier
> way?
> Your help is greatly appreciated ! Many thanks for
> your patience.
>
> Regards
> Meenu
>
>
> On Sat, Aug 1, 2009 at 9:43 PM,
> David Winsemius <dwinsemius at comcast.net>
> wrote:
>
>
>
>
>
> On Aug 1, 2009, at 9:52 AM, Meenu Sahi wrote:
>
>
> Deare R
> users
>
> I am new to R.
> What I want to do is explained below;-
> I have table called States.Prob which is given below:-
>
> This table gives the probabilities of the changes in the
> swap curve
> depending on the state of the swap curve. I want to put
> these probabilities
> in my dataframe mydata(given after the prob table).
> Prob of States
>
> Changes State1 State2 State3 State4
> a Pa1 Pa2 Pa3 Pa4
> b Pb1 Pb2 Pb3 Pb4
> c Pc1 Pc2 Pc3 Pc4
> d Pd1 Pd2 Pd3 Pd4
>
>
> and I have a dataframe(with 93 rows) called mydata part of
> which(6 rows) is
> given below where I want to fill in the last four columns
> with probabilities
> taken from States.Prob according to the change and state in
> mydata4:-
>
> Change State PState1 PState2 PState3 PState4
> 1 b State1 Pb1
> 2 a State4
> Pa4
> 3 b State2 Pb2
> 4 c State3
> Pc3
>
> 5 d State1 Pd1
> 6 a State3
> Pa3
>
> What I want to do is highlighted in Red.
> How can I do this easily?
>
> You may have seen it in red, but
> we don't, ....and I, at least, cannot figure out what
> you intend. (Per the Posting Guide, which you have
> obviously not yet read, you need to compose your question in
> plain old monochromatic text and change your mail client so
> it posts in plain text.)
>
>
> If looking at the help pages for stack() and reshape() does
> not offer useful information and worked examples that meet
> your needs then:
>
> An approach that would make you more populat in these parts
> would be to make a simpler example, composed in
> syntactically correct R, that is complete in itself, and can
> pasted into an R session. Indicate what you intend as output
> from this simpler input.
>
>
> Perhaps....
>
> > pstate <- read.table(textConnection("Changes
> State1 State2 State3 State4
>
> + a Pa1 Pa2 Pa3 Pa4
> + b Pb1 Pb2 Pb3 Pb4
> + c Pc1 Pc2 Pc3 Pc4
> + d Pd1 Pd2 Pd3
> Pd4"), header=TRUE, as.is=TRUE)
>
>
> ?stack
>
> > data.frame(Change=pstate[,1],
> prstate =stack(pstate[2:5])$values,
> state=stack(pstate[2:5])$ind )
>
> #first column is only 4 elements long, but will get
> recycled
>
> # second retreives the probabilities and may need to have
> as.numeric( ) wrapped around it if they really are numeric.
> # third returns what started out as column names.
>
> Change prstate state
> 1 a Pa1 State1
>
> 2 b Pb1 State1
> 3 c Pc1 State1
> 4 d Pd1 State1
> 5 a Pa2 State2
> 6 b Pb2 State2
> 7 c Pc2 State2
> 8 d Pd2 State2
> 9 a Pa3 State3
>
> 10 b Pb3 State3
> 11 c Pc3 State3
> 12 d Pd3 State3
> 13 a Pa4 State4
> 14 b Pb4 State4
> 15 c Pc4 State4
> 16 d Pd4 State4
>
>
>
> Many
> thanks for your time.
>
> kind regards
> Meenu
> P.S. Thanks for your reply John. I've tried to put only
> the relevant columns
>
> of the dataframe. Hope its more clear now.
>
>
> \\\\\\\\\\\\\\\\\\//////////////////
>
>
> [[alternative HTML version deleted]]
>
> ^^^^^^^^^^^^^^Note: ^^^^^^^^^^^^^^^^^^^^^^
>
>
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT
>
>
>
>
__________________________________________________________________
Reclaim your name @ymail.com or @rocketmail.com. Get your new email address now! Go to http://ca.promos.yahoo.com/jacko/
More information about the R-help
mailing list