[R] create list of names where two df contain == values

Rob Griffin robgriffin247 at hotmail.com
Wed Nov 16 14:03:30 CET 2011


Hello again... sorry to be posting yet again, but I hadn't anticipated this 
problem.

I am trying to now put the names found in one column in data frame 1 (lets 
call it df.1[,1]) in to a list from the rows where the values in df.1[,2] 
match values in a column of another dataframe (df.2[3])
I tried to write this function so that it put the list of names (called 
Iffy) where the 2 criteria (df.1[141] and df.2[21]) matched but I think its 
too complex for a beginner R-enthusiast

ify<-function(x,y,a,b,c) if(x[[,a]]==y[[,b]]) {list(x[[,c]])} else {NULL}
Iffy<-apply(  df.1,  1,  FUN=ify,  x=df.1,  y=df.2,  a=2,  b=3,  c=1  )

But this didn't work... Error in FUN(newX[, i], ...) : unused argument(s) 
(newX[, i])


Here is a dataset that replicates the problem, you'll notice the "h" 
criteria values are different between the two dataframes and therefore it 
would produce a list  of the 9 letters where the two criteria columns 
matched (a,b,c,d,e,f,g,i,j):



df.1<-data.frame(rep(letters[1:10]))
colnames(df.1)[1]<-("Letters")
set.seed(1)
df.1$numb1<-rnorm(10,1,1)
df.1$extra.col<-c(1,2,3,4,5,6,7,8,9,10)
df.1$id<-c("CG234","CG232","CG441","CG128","CG125","CG182","CG982","CG541","CG282","CG154")
df.1

df.2<-data.frame(rep(letters[1:10]))
colnames(df.2)[1]<-("Letters")
set.seed(1)
df.2$extra.col<-c(1,2,3,4,5,6,7,8,9,10)
df.2$numb1<-rnorm(10,1,1)
df.2$id<-c("CG234","CG232","CG441","CG128","CG125","CG182","CG982","CG541","CG282","CG154")
df.2[8,3]<-12

df.1
df.2




Your patience is much appreciated,
Rob



More information about the R-help mailing list