Hi:

Try this:

f <- function(x) ifelse(sum(x > 0) == 1L, names(which(x > 0)), NA)
g <- function(x) ifelse(sum(x > 0) == 2L, names(which(x == 0L)), NA)
> apply(df1[, 3:5], 1, f)
 [1] "ANN" "CTA" "GLM" NA    "ANN" NA    NA    NA    NA    "CTA"
> apply(df1[, 3:5], 1, g)
 [1] NA    NA    NA    NA    NA    NA    "GLM" "CTA" NA    NA

HTH,
Dennis

On Wed, Jan 26, 2011 at 9:36 PM, Daisy Englert Duursma <
daisy.duursma@gmail.com> wrote:

> Hello,
>
> I am not sure where to begin with this problem or what to search for
> in r-help. I just don't know what to call this.
>
> If I have 5 columns, the first 2 are the x,y, locations and the last
> three are variables about those locations.
>
> x<-seq(1860,1950,by=10)
> y<-seq(-290,-200,by=10)
> ANN<-c(3,0,0,0,1,0,1,1,0,0)
> CTA<-c(0,1,0,0,0,0,1,0,0,2)
> GLM<-c(0,0,2,0,0,0,0,1,0,0)
> df1<-as.data.frame(cbind(x,y,ANN,CTA,GLM))
>
> What I would like to produce is an additional column that tells when
> only 1 of the three variables has a value greater than 0. I would like
> this new column to give the name of the variable. Likewise, I would
> like a column that tells one only one of the three variables for a
> given row has a value of 0. For my example the new columns would be:
>
> one_presence<-c("ANN","CTA","GLM","NA","ANN","NA","NA","NA","NA","CTA")
> one_absence<-c("NA","NA","NA","NA","NA","NA","GLM","CTA","NA","NA")
>
> The end result should look like
>
> df2<-(cbind(df1,one_presence,one_absence))
>
> I am sure I can do this with a loop or maybe grep but I am out of ideas.
>
> Any help would be appreciated.
>
> Cheers,
> Daisy
>
> --
> Daisy Englert Duursma
>
> Room E8C156
> Dept. Biological Sciences
> Macquarie University  NSW  2109
> Australia
>
> ______________________________________________
> 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.
>

	[[alternative HTML version deleted]]

