Hi, I am new R user and I am still learn this fabulous software. I am stuck on this part. I need to check 2 character vectors v1 <- c("age_1","age_2","age_3","age_4","age_5","age_6","height_1","height_2","height_3","height_4","height_5","height_6","height_7","height_8") and v2 <- c("sex_1","sex_2","sex_3","age_height_1_1","age_height_2_2","age_height_3_3","age_height_4_4","age_height_5_5","age_height_6_6", "age_height_1_7","age_height_2_8") what I really want to do is loop over v2 and check if its interaction component have any element in v1then return this component (i.e. v2 [4] "age_height_1_1" then check v1 which has "age_1" or "height_1" then return "age_height_1_1") . Is there a way to do that? Thanks -- View this message in context: http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115.html Sent from the R help mailing list archive at Nabble.com.
Hi, Not sure whether I understand it correctly. v1 <- c("age_1","age_2","age_3","age_4","age_5","age_6","height_1","height_2","height_3","height_4","height_5","height_6","height_7","height_8") v2 <- c("sex_1","sex_2","sex_3","age_height_1_1","age_height_2_2","age_height_3_3","age_height_4_4","age_height_5_5","age_height_6_6", ? ? ? ? ?"age_height_1_7","age_height_2_8") ?v3<-gsub("(age{0,1}\\_).*","\\1",v1) v4<-gsub("age{0,1}\\_(.*)","\\1",v1) v5<-gsub("(height{0,1}\\_).*","\\1",v1) v6<-gsub("height{0,1}\\_(.*)","\\1",v1) newv1<-paste0(v3[grep("age",v3)],v5[grep("height",v5)],v4[!v4%in%v4[grep("height",v4)]],"_",v6[!v6%in%v6[grep("age",v6)]]) newv1[newv1%in%v2] #[1] "age_height_1_1" "age_height_2_2" "age_height_3_3" "age_height_4_4" #[5] "age_height_5_5" "age_height_6_6" "age_height_1_7" "age_height_2_8" A.K. ----- Original Message ----- From: frespider <frespider at hotmail.com> To: r-help at r-project.org Cc: Sent: Thursday, November 1, 2012 8:36 AM Subject: [R] Return Vector Component Hi, I am new? R user and I am still learn this fabulous software. I am stuck on this part. I need to check 2 character vectors v1 <- c("age_1","age_2","age_3","age_4","age_5","age_6","height_1","height_2","height_3","height_4","height_5","height_6","height_7","height_8") and v2 <- c("sex_1","sex_2","sex_3","age_height_1_1","age_height_2_2","age_height_3_3","age_height_4_4","age_height_5_5","age_height_6_6", ? ? ? ? "age_height_1_7","age_height_2_8") what I really want to do is loop over v2 and check if its interaction component have any element in v1then return this component (i.e. v2 [4] "age_height_1_1" then check v1 which has "age_1" or "height_1"? then return "age_height_1_1") . Is there a way to do that? Thanks -- View this message in context: http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115.html Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help at 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.
Hi A.K. Thank you so much for replying this could work but the problem you recreate the newv1, to match v2 but I don't want to do that. I just want to check if v2 has that component from v1 THanks Date: Thu, 1 Nov 2012 06:32:03 -0700 From: ml-node+s789695n4648123h64@n4.nabble.com To: frespider@hotmail.com Subject: Re: Return Vector Component Hi, Not sure whether I understand it correctly. v1 <- c("age_1","age_2","age_3","age_4","age_5","age_6","height_1","height_2","height_3","height_4","height_5","height_6","height_7","height_8") v2 <- c("sex_1","sex_2","sex_3","age_height_1_1","age_height_2_2","age_height_3_3","age_height_4_4","age_height_5_5","age_height_6_6", "age_height_1_7","age_height_2_8") v3<-gsub("(age{0,1}\\_).*","\\1",v1) v4<-gsub("age{0,1}\\_(.*)","\\1",v1) v5<-gsub("(height{0,1}\\_).*","\\1",v1) v6<-gsub("height{0,1}\\_(.*)","\\1",v1) newv1<-paste0(v3[grep("age",v3)],v5[grep("height",v5)],v4[!v4%in%v4[grep("height",v4)]],"_",v6[!v6%in%v6[grep("age",v6)]]) newv1[newv1%in%v2] #[1] "age_height_1_1" "age_height_2_2" "age_height_3_3" "age_height_4_4" #[5] "age_height_5_5" "age_height_6_6" "age_height_1_7" "age_height_2_8" A.K. If you reply to this email, your message will be added to the discussion below: http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115p4648123.html To unsubscribe from Return Vector Component, click here. NAML -- View this message in context: http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115p4648126.html Sent from the R help mailing list archive at Nabble.com. [[alternative HTML version deleted]]
HI, May be this is a bit closer: ?res1<-unlist(lapply(strsplit(v2,"_"),function(x) paste(x[1],x[3],x[2],x[4],sep="_"))) ?v1[1] #[1] "age_1" v2[grep(v1[1],res1)] #[1] "age_height_1_1" "age_height_1_7" ?v1[8] #[1] "height_2" v2[grep(v1[8],res1)] #[1] "age_height_2_2" A.K. ----- Original Message ----- From: frespider <frespider at hotmail.com> To: r-help at r-project.org Cc: Sent: Thursday, November 1, 2012 10:20 AM Subject: Re: [R] Return Vector Component Hi A.K. Thank you so much for replying this could work but the problem you recreate the newv1, to match v2 but I don't want to do that. I just want to check? if v2 has that component from v1 THanks Date: Thu, 1 Nov 2012 06:32:03 -0700 From: ml-node+s789695n4648123h64 at n4.nabble.com To: frespider at hotmail.com Subject: Re: Return Vector Component ??? Hi, Not sure whether I understand it correctly. v1 <- c("age_1","age_2","age_3","age_4","age_5","age_6","height_1","height_2","height_3","height_4","height_5","height_6","height_7","height_8") v2 <- c("sex_1","sex_2","sex_3","age_height_1_1","age_height_2_2","age_height_3_3","age_height_4_4","age_height_5_5","age_height_6_6", ? ? ? ? "age_height_1_7","age_height_2_8") v3<-gsub("(age{0,1}\\_).*","\\1",v1) v4<-gsub("age{0,1}\\_(.*)","\\1",v1) v5<-gsub("(height{0,1}\\_).*","\\1",v1) v6<-gsub("height{0,1}\\_(.*)","\\1",v1) newv1<-paste0(v3[grep("age",v3)],v5[grep("height",v5)],v4[!v4%in%v4[grep("height",v4)]],"_",v6[!v6%in%v6[grep("age",v6)]]) newv1[newv1%in%v2] #[1] "age_height_1_1" "age_height_2_2" "age_height_3_3" "age_height_4_4" #[5] "age_height_5_5" "age_height_6_6" "age_height_1_7" "age_height_2_8" A.K. ??? ??? ??? ??? ??? ??? ??? ??? ??? If you reply to this email, your message will be added to the discussion below: ??? ??? http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115p4648123.html ??? ??? ??? ??? ??? ??? To unsubscribe from Return Vector Component, click here. ??? ??? NAML ??? ??? ??? ??? ? ??? ??? ? -- View this message in context: http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115p4648126.html Sent from the R help mailing list archive at Nabble.com. ??? [[alternative HTML version deleted]] ______________________________________________ R-help at 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.
HI, By splitting that code into smaller components: res1<-strsplit(v2,"_") # will split the elements into substrings wherever? it matches substring "_".? Result will be a list ?head(res1) #[[1]] #[1] "sex" "1"? #[[2]] #[1] "sex" "2"? # [[3]] #[1] "sex" "3"? # #[[4]] #[1] "age"??? "height" "1"????? "1"???? #[[5]] #[1] "age"??? "height" "2"????? "2"???? #[[6]] #[1] "age"??? "height" "3"????? "3"???? #lists can be processed with lapply().? I used paste() to rearrange the split components so that it matches with v1 lapply(res1,function(x) paste(x[1],x[3],x[2],x[4],sep="_")) # in this case I change the order of components,? You can try changing the order or the number of #components and see how it works. #For example unlist(lapply(res1,function(x) paste(x[1],x[3],sep="_"))) #with just 1st and 3rd component # [1] "sex_NA" "sex_NA" "sex_NA" "age_1"? "age_2"? "age_3"? "age_4"? "age_5" ?#[9] "age_6"? "age_1"? "age_2" ?res2<-unlist(lapply(strsplit(v2,"_"),function(x) paste(x[1],x[3],x[2],x[4],sep="_"))) #Last part is indexing: #grep() regular expression v1[1] #[1] "age_1" ?grep(v1[1],res2) #[1]? 4 10?????????? #this means 4th and 10 element of res2 matches with first element of v1[1] ? res2[4] #[1] "age_1_height_1" #The goal is to get the corresponding element of v2 that matches with v1.? Since the order of res2 and v2 are the same, we can index it to get the matching v2 #elements. v2[grep(v1[1],res2)] #[1] "age_height_1_1" "age_height_1_7" I hope this helps you. A.K. ? ________________________________ From: Fares Said <frespider at hotmail.com> To: smartpink111 at yahoo.com Sent: Thursday, November 1, 2012 2:09 PM Subject: RE: [R] Return Vector Component Hi, I think this is better, but can you explain to me what? this code do function(x) paste(x[1],x[3],x[2],x[4],sep="_"), Thanks> Date: Thu, 1 Nov 2012 10:17:56 -0700 > From: smartpink111 at yahoo.com > Subject: Re: [R] Return Vector Component > To: frespider at hotmail.com > CC: r-help at r-project.org > > HI, > > May be this is a bit closer: > ?res1<-unlist(lapply(strsplit(v2,"_"),function(x) paste(x[1],x[3],x[2],x[4],sep="_"))) > ?v1[1] > #[1] "age_1" > > v2[grep(v1[1],res1)] > #[1] "age_height_1_1" "age_height_1_7" > > ?v1[8] > #[1] "height_2" > v2[grep(v1[8],res1)] > #[1] "age_height_2_2" > A.K. > > > > > ----- Original Message ----- > From: frespider <frespider at hotmail.com> > To: r-help at r-project.org > Cc: > Sent: Thursday, November 1, 2012 10:20 AM > Subject: Re: [R] Return Vector Component > > > > Hi A.K. > > Thank you so much for replying this could work but the problem you recreate the newv1, to match v2 but I don't want to do that. I just want to check? if v2 has that component from v1 > > THanks > Date: Thu, 1 Nov 2012 06:32:03 -0700 > From: ml-node+s789695n4648123h64 at n4.nabble.com > To: frespider at hotmail.com > Subject: Re: Return Vector Component > > > > ??? Hi, > > > Not sure whether I understand it correctly. > > v1 <- c("age_1","age_2","age_3","age_4","age_5","age_6","height_1","height_2","height_3","height_4","height_5","height_6","height_7","height_8") > > v2 <- c("sex_1","sex_2","sex_3","age_height_1_1","age_height_2_2","age_height_3_3","age_height_4_4","age_height_5_5","age_height_6_6", > > ? ? ? ???"age_height_1_7","age_height_2_8") > > v3<-gsub("(age{0,1}\\_).*","\\1",v1) > > v4<-gsub("age{0,1}\\_(.*)","\\1",v1) > > v5<-gsub("(height{0,1}\\_).*","\\1",v1) > > v6<-gsub("height{0,1}\\_(.*)","\\1",v1) > > newv1<-paste0(v3[grep("age",v3)],v5[grep("height",v5)],v4[!v4%in%v4[grep("height",v4)]],"_",v6[!v6%in%v6[grep("age",v6)]]) > > newv1[newv1%in%v2] > > #[1] "age_height_1_1" "age_height_2_2" "age_height_3_3" "age_height_4_4" > > #[5] "age_height_5_5" "age_height_6_6" "age_height_1_7" "age_height_2_8" > > A.K. > > > > ??? > ??? > ??? > ??? > > ??? > > ??? > ??? > ??? ??? If you reply to this email, your message will be added to the discussion below: > ??? ??? http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115p4648123.html > ??? > ??? > ??? ??? > ??? ??? To unsubscribe from Return Vector Component, click here. > > ??? ??? NAML > ???????? ???????? ?????? ??? ? > > > > -- > View this message in context: http://r.789695.n4.nabble.com/Return-Vector-Component-tp4648115p4648126.html > Sent from the R help mailing list archive at Nabble.com. > ??? [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >