I think one of the other good suggestions might have had a typo in it.
And, I would like to append an alternate approach that can be generalized to more columns.

In my opinion, nested ifelse() expressions are difficult to read and understand, and therefore difficult to get right. Easier to write one expression for each of your criteria. But do the last one first

##  X1+X2 if X1 and X2 are not NA
data$X3 <- with(data, X1+X2)

## X1, if X2=NA
data$X3[is.na(data$X2)] <- data$X1[is.na(data$X2)]

## X2, if X1=NA
data$X3[is.na(data$X1)] <- data$X2[is.na(data$X1)]


But, what if you had three columns, X1, X2, X3, and wanted X4 to be the sum of the others, excluding NA values (which is essentially what you're doing)

data$X4 <- apply(data[,c('X1','X2','X3')] ,
                 1 ,
                 function(xr) {if (any(!is.na(xr))) sum(xr,na.rm=TRUE) else NA}
                 )

Example:

firm<-c(rep(1:3,4))
year<-c(rep(2001:2003,4))
X1<-rep(c(10,NA),6)
X2<-rep(c(5,NA,2),4)
X3 <- c(NA,NA,rep(1,9),NA)
data<-data.frame(firm, year,X1,X2,X3)

data$X4 <- apply(data[,c('X1','X2','X3')] ,
                 1 ,
                 function(xr) {if (any(!is.na(xr))) sum(xr,na.rm=TRUE) else NA}
                 )
print(data)


Or, for your case, with just the two columns:

data$X3 <- apply(data[,c('X1','X2')] ,
                 1 ,
                 function(xr) {if (any(!is.na(xr))) sum(xr,na.rm=TRUE) else NA}
                 )

should do it.


-Don

At 6:48 PM +0100 6/8/09, Cecilia Carmo wrote:
Hi R-helpers!

I have the following dataframe:
firm<-c(rep(1:3,4))
year<-c(rep(2001:2003,4))
X1<-rep(c(10,NA),6)
X2<-rep(c(5,NA,2),4)
data<-data.frame(firm, year,X1,X2)
data

So I want to obtain the same dataframe with a variable X3 that is:
X1, if X2=NA
X2, if X1=NA
X1+X2 if X1 and X2 are not NA

So my final data is
X3<-c(15,NA,12,5,10,2,15,NA,12,5,10,2)
finaldata<-data.frame(firm, year,X1,X2,X3)

I've tried this
finaldata<-ifelse(data$X1==NA,ifelse(data$X2==NA,NA,X2),ifelse(data$varvendas==NA,X1,X1+X2))
But I got just NA in X3.
Anyone could help me with this?

Thanks in advance,

CecĂ­lia (Universidade de Aveiro - Portugal)

______________________________________________
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.


--
--------------------------------------
Don MacQueen
Environmental Protection Department
Lawrence Livermore National Laboratory
Livermore, CA, USA
925-423-1062

______________________________________________
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