Please keep the mailing list included by using "reply-all"... I am not doing this as a private consultation.

Your sample data is a step forward, but it is still not reproducible. You could Google "R reproducible example" and find http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example.

Try running the following R code, and decipher each step using the R help documentation (such as typing ?dput at the R command line) and the Introduction to R document (particularly about indexing):

# What you should have provided

# dput( PastData )
PastData <- structure(list(Name = c("aaa", "ccc", "ddd"), Code = c(1L, 3L, 4L)), .Names = c("Name", "Code"), class = "data.frame", row.names = c(NA, -3L))

# dput( CurrentData )
CurrentData <- structure(list(Name = c("aaa", "bbb", NA, "ddd"), Code = 1:4), .Names = c("Name", "Code"), class = "data.frame", row.names = c(NA, -4L))

# Want to fix CurrentData to be like NewData

# dput( NewData )
NewData <- structure(list(Name = c("aaa", "bbb", "ccc", "ddd"), Code = 1:4), .Names = c("Name", "Code"), row.names = c(NA, -4L), class = "data.frame")

# What the answer might look like if you had provided the above

# Learning sequence... what is the current code vector?
CurrentData$Code
# Which indexes in PastData have the codes from CurrentData?
match( CurrentData$Code, PastData$Code )
# How do we look up the corresponding Name values?
PastData[ match( CurrentData$Code, PastData$Code ), "Name" ]
# At this point, we have a vector of names from PastData corresponding to # codes in CurrentData
# Pick only those names from PastData where the CurrentData$Name is NA
ifelse( is.na( CurrentData$Name ), PastData[ match( CurrentData$Code, PastData$Code ), "Name" ], CurrentData$Name )

# Proposed new data frame
MyNewData <- CurrentData
MyNewData$Name <- ifelse( is.na( CurrentData$Name ), PastData[ match( CurrentData$Code, PastData$Code ), "Name" ], CurrentData$Name )

# Check whether we achieved your goal
identical( MyNewData, NewData )

---

Please note that your data frame might already have converted the Name column to a factor, so the above code might need to be adapted or you might be better off re-importing your data so that the Name column is a character vector instead of a factor. If you had read about and created a reproducible example we would already know whether this was going to be a problem.

On Wed, 26 Mar 2014, Megan Weigel wrote:

I apologize... I will make time to read Posting Guide.

The date looks similar to the following:

PastData:
Name   Code
aaa      1
ccc      3
ddd      4

CurrentData:
Name   Code
aaa      1
bbb      2
NA       3
ddd      4

It should look like this...

NewData:
Name   Code
aaa      1
bbb      2
ccc      3
ddd      4

The code has to replace NA with the name that corresponds to the same code 
number in the PastData. They
also do not have the same number of rows.

Thank you very much,

Johnson


On Wed, Mar 26, 2014 at 1:36 PM, Jeff Newmiller <jdnew...@dcn.davis.ca.us> 
wrote:
      Please read and in the future follow the Posting Guide, which requests 
that you provide a
      reproducible example... that is, a series of R statements that we can run 
to get us to your
      problem point with a small sample data set that resembles yours. Forging 
on anyway...

      The ifelse function applies to vectors, not data frames. That is, as long 
as both data
      frames have the same number of rows, you should be able to do things like

      CurrentDataFrame$Name <- ifelse( CurrentDataFrame$Name=="NA", 
PastDataFrame$Name,
      CurrentDataFrame$Name)

      Please note that NA is completely different than "NA" (read the 
Introduction to R document
      that comes with R if you need a refresher). If you are really trying to 
weed out NA values
      then you would need to do something like

      CurrentDataFrame$Name <- ifelse( is.na(CurrentDataFrame$Name), 
PastDataFrame$Name,
      CurrentDataFrame$Name)

      Also, if you need speed or are pushing the limits of your RAM, the 
following approach
      avoids replacing the entire vector:

      idx <- is.na(CurrentDataFrame$Name)
      CurrentDataFrame[idx,"Name"] <- PastDataFrame[idx,"Name"]

      
---------------------------------------------------------------------------
      Jeff Newmiller                        The     .....       .....  Go 
Live...
      DCN:<jdnew...@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live 
Go...
                                            Live:   OO#.. Dead: OO#..  Playing
      Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
      /Software/Embedded Controllers)               .OO#.       .OO#.  
rocks...1k
      
---------------------------------------------------------------------------
      Sent from my phone. Please excuse my brevity.

      On March 26, 2014 9:44:06 AM PDT, Megan Weigel <mw5w...@gmail.com> wrote:
      >Hello,
      >
      >Hopefully there is an answer for this, but I need an ifelse statement
      >that
      >replaces and returns a value based on a different dataframe. For
      >example:
      >
      
>CurrentDataFrame<-ifelse(CurrentDataFrame$Name=="NA",match(CurrentDataFrame$Code
      >with PastDataFrame$Code),replace(CurrentDataFrame$Name) with
      >(PastDataFrame$Name)
      >
      >
      >I hope that makes sense.
      >
      >Thank you very much,
      >
      >Johnson
      >
>       [[alternative HTML version deleted]]
>
>______________________________________________
>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.




--
Megan Weigel
(865)924-2124
mw5w...@gmail.com



---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnew...@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
---------------------------------------------------------------------------
______________________________________________
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.

Reply via email to