HI, Try this: data1 <- data.frame("var1"=c(1,2,3),"var2"=c("A","B","C"),"var3"=c(4,5,6)) #your example
data2 <- data.frame("var1"=c(1,2,3),"var2"=c("5","6","9"),"var3"=c(4,5,6)) #your example data3<- data.frame(var1=c(5,6,5,5),var2=c(4,4,5,3),var3=c(1,4,3,5)) data4<- data.frame(var1=c(1,2,3),var2=c(1,4,6)) fun1<- function(dat,value){ cols<- colnames(dat) indx1<- rowSums(dat==value) if(any(indx1>1)){ lst<-apply(dat,1,function(x) cols[x==value]) lst[lapply(lst,length)==0]<-NA dat$newvar<-lst dat } else{ indx2<- (dat==value)%*%seq_along(cols) indx2[indx2==0]<-NA dat$newvar<-cols[indx2] dat } } data1New<-fun1(data1,5) data1New # var1 var2 var3 newvar #1 1 A 4 <NA> #2 2 B 5 var3 #3 3 C 6 <NA> data2New<-fun1(data2,5) data2New # var1 var2 var3 newvar #1 1 5 4 var2 #2 2 6 5 var3 #3 3 9 6 <NA> data3New<- fun1(data3,5) data3New # var1 var2 var3 newvar #1 5 4 1 var1 #2 6 4 4 NA # 5 5 3 var1, var2 #4 5 3 5 var1, var3 fun1(data4,5) # var1 var2 newvar #1 1 1 <NA> #2 2 4 <NA> #3 3 6 <NA> A.K. Dear R Community, I tried searching the archives for the question below, but couldn't find what I was looking for - please help! Suppose I have a data frame like the following: data <- data.frame("var1"=c(1,2,3),"var2"=c("A","B","C"),"var3"=c(4,5,6)) > data <- data.frame("var1"=c(1,2,3),"var2"=c("5","6","9"),"var"=c(4,5,6)) > data var1 var2 var3 1 1 5 4 2 2 6 5 3 3 9 6 I would like to create a new variable that identifies the column name where the value 5 appears. the results should look like below: var1 var2 var3 newvar 1 1 5 4 var2 2 2 6 5 var3 3 3 9 6 <NA> Can anyone share code that shows the most efficient way to accomplish this? Any help is much appreciated. Thanks! ______________________________________________ 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.