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.