[R] Duplicated function with conditional statement
arun
smartpink111 at yahoo.com
Sun Jul 28 03:40:14 CEST 2013
If you wanted to wrap it in a function:
fun1<- function(dat,colName,newColumn){
indx<- which(dat[,colName]=="buy")
dat[,newColumn]<-0
dat[unique(unlist(lapply(seq_along(indx),function(i){
x1<- if(i==length(indx)){
seq(indx[i],nrow(dat))
}
else if((indx[i+1]-indx[i])==1){
indx[i]
}
else {
seq(indx[i]+1,indx[i+1]-1)
}
x2<- dat[unique(c(indx[i:1],x1)),]
x3<- subset(x2,response=="sample")
x4<- subset(x2,response=="buy")
x4New<-x4[order(as.numeric(row.names(x4))),]
x5<- row.names(x4New)[duplicated(x4New$product)]
x6<- if(nrow(x3)!=0) {
row.names(x3)[x3$product%in% x4$product]
}
sort(as.numeric(c(x5,x6)))
}))),newColumn] <- 1
dat
}
fun1(tt1,"response","newCol")
# subj response product newCol
#1 1 sample 1 0
#2 1 sample 2 0
#3 1 buy 3 0
#4 2 sample 2 0
#5 2 buy 2 0
#6 3 sample 3 1
#7 3 sample 2 1
#8 3 buy 1 0
#9 4 sample 1 1
#10 4 buy 4 0
#11 5 buy 4 1
#12 5 sample 2 1
#13 5 buy 2 1
#14 6 buy 4 1
#15 6 sample 5 0
#16 6 sample 5 0
#17 7 sample 4 1
#18 7 buy 3 1
#19 7 buy 4 1
#20 8 buy 5 0
#21 8 sample 4 1
#22 8 buy 2 1
A.K.
----- Original Message -----
From: arun <smartpink111 at yahoo.com>
To: vanessa van der vaart <vanessa.vaart at gmail.com>
Cc: David Winsemius <dwinsemius at comcast.net>; R help <r-help at r-project.org>
Sent: Saturday, July 27, 2013 9:11 PM
Subject: Re: [R] Duplicated function with conditional statement
HI,
May be this is what you wanted.
#using tt1
indx<-which(tt1$response=="buy")
tt1$newcolumn<-0
tt1[unique(unlist(lapply(seq_along(indx),function(i){x1<-if(i==length(indx)) seq(indx[i],nrow(tt1)) else if((indx[i+1]-indx[i])==1) indx[i] else seq(indx[i]+1,indx[i+1]-1);x2<- tt1[unique(c(indx[1:i],x1)),];x3<-subset(x2,response=="sample");x4<- subset(x2,response=="buy"); x5<-row.names(x4)[duplicated(x4$product)];x6<-if(nrow(x3)!=0) row.names(x3)[x3$product%in% x4$product];sort(c(x5,x6))}))),"newcolumn"]<-1
tt1
subj response product newcolumn
1 1 sample 1 0
2 1 sample 2 0
3 1 buy 3 0
4 2 sample 2 0
5 2 buy 2 0
6 3 sample 3 1
7 3 sample 2 1
8 3 buy 1 0
9 4 sample 1 1
10 4 buy 4 0
11 5 buy 4 1
12 5 sample 2 1
13 5 buy 2 1
14 6 buy 4 1
15 6 sample 5 0
16 6 sample 5 0
17 7 sample 4 1
18 7 buy 3 1
19 7 buy 4 1
20 8 buy 5 0
21 8 sample 4 1
22 8 buy 2 1
A.K.
________________________________
From: vanessa van der vaart <vanessa.vaart at gmail.com>
To: arun <smartpink111 at yahoo.com>
Cc: David Winsemius <dwinsemius at comcast.net>; R help <r-help at r-project.org>
Sent: Saturday, July 27, 2013 6:55 PM
Subject: Re: [R] Duplicated function with conditional statement
Dear all,,
thank you all for your help..Its been such a help but its not really exactly what I am looking for. Apparently I havent explained the condition very clearly. I hope this can works.
If the data on column product is duplicated from the previous row, (its applied for response==buy and ==sample) , and it is duplicated from the row which has the value on column 'response'== buy, than the value = 1, otherwise is =0.
so in that case,
if the value is duplicated but it is duplicated from the previous row where the value of resonse==sample, than it is not considered duplicated, and in the new column is 0
thank you very much in advance,
I really appreciated
More information about the R-help
mailing list