I have 2 dataframes, each with 5 columns and 20 rows. They are called data1 and data2.I wish to create a third dataframe called data3, also with 5 columns and 20 rows. I want data3 to contains the values in data1 when the value in data1 is not NA. Otherwise it should contain the values in data2. I have tried afew methids, but they do not seem to work as intended.: data3<-ifelse(is.na(data1)=F,data1,data2) and data3[,]<-ifelse(is.na(data1[,])=F,data1[,],data2[,]) Please suggest the ?best? way.
On Tue, 10 Jan 2006 20:25:23 -0500, r user <ruser2006 at yahoo.com> wrote:> I have 2 dataframes, each with 5 columns and 20 rows. > They are called data1 and data2.I wish to create a > third dataframe called data3, also with 5 columns and > 20 rows. > > I want data3 to contains the values in data1 when the > value in data1 is not NA. Otherwise it should contain > the values in data2. > > I have tried afew methids, but they do not seem to > work as intended.: > > data3<-ifelse(is.na(data1)=F,data1,data2) > > and > > data3[,]<-ifelse(is.na(data1[,])=F,data1[,],data2[,]) > > Please suggest the best way. >Not sure about the bast but... a<-c(1,2,3,NA,5) b<-c(4,4,4,4,4) c<-a c[which(is.na(a))]<-b[which(is.na(a))]> ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html >
Tom wrote:> On Tue, 10 Jan 2006 20:25:23 -0500, r user <ruser2006 at yahoo.com> wrote: > > >>I have 2 dataframes, each with 5 columns and 20 rows. >>They are called data1 and data2.I wish to create a >>third dataframe called data3, also with 5 columns and >>20 rows. >> >>I want data3 to contains the values in data1 when the >>value in data1 is not NA. Otherwise it should contain >>the values in data2. >> >>I have tried afew methids, but they do not seem to >>work as intended.: >> >>data3<-ifelse(is.na(data1)=F,data1,data2) >> >>and >> >>data3[,]<-ifelse(is.na(data1[,])=F,data1[,],data2[,]) >> >>Please suggest the best way."Better" way is to have the Syntax correct: data3 <- ifelse(is.na(data1), data2, data1) Please check the archives for almost millions of posts asking more or less this question...!> Not sure about the bast but... > > a<-c(1,2,3,NA,5) > b<-c(4,4,4,4,4) > > c<-a > c[which(is.na(a))]<-b[which(is.na(a))]Why do you want to know which()? na <- is.na(a) c[na] <- b[na] Uwe Ligges> > > > >>______________________________________________ >>R-help at stat.math.ethz.ch mailing list >>https://stat.ethz.ch/mailman/listinfo/r-help >>PLEASE do read the posting guide! >>http://www.R-project.org/posting-guide.html >> > > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
The equality operator is == not =. So you need is.na(data1) == FALSE (F is a variable, and FALSE is the non-truth value), or, clearer, ifelse(!is.na(data1), data1, data2) Another way is data3 <- data1 data3[is.na(data1)] <- data2[is.na(data1)] which is more efficient but less clear. On Tue, 10 Jan 2006, r user wrote:> I have 2 dataframes, each with 5 columns and 20 rows. > They are called data1 and data2.I wish to create a > third dataframe called data3, also with 5 columns and > 20 rows. > > I want data3 to contains the values in data1 when the > value in data1 is not NA. Otherwise it should contain > the values in data2. > > I have tried afew methids, but they do not seem to > work as intended.: > > data3<-ifelse(is.na(data1)=F,data1,data2) > > and > > data3[,]<-ifelse(is.na(data1[,])=F,data1[,],data2[,]) > > Please suggest the ?best? way.-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595