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!