Hi, It's not clear about the pattern in your rownames. In the for() loop, I guess you need rownames(df) instead of df. Using an example dataset (Here the rownames may be different) set.seed(59) ?x <- as.data.frame(matrix(rnorm(110),ncol=2)) set.seed(24) row.names(x) <- paste0(row.names(x),Reduce(`paste0`,lapply(1:2,function(x) sample(letters,55,replace=TRUE)))) set.seed(435) df <- as.data.frame(matrix(sample(200,300*20,replace=TRUE),ncol=20)) set.seed(34) row.names(df) <- paste0(sample(1:55,300,replace=TRUE),Reduce(`paste0`,lapply(1:2,function(x) sample(letters,300,replace=TRUE)))) ?gl1 <- sapply(rownames(x),function(i) grep(paste0(gsub("\\d+","",i),"$"),rownames(df))) ?gl1[2] #$`2fl` #[1] 128 rownames(df[128,]) #[1] "31fl" A.K. Hi, I'm having trouble using grep with a variable. When I do this it works fine: grep("^hb$", rownames(df)) [1] 9359 but what I really want to do is use the rownames of 1 data frame (x) to extract the position of that same rowname in a larger data frame (df). How can I do this for say all of the rownames in x? The positions should be stored in a variable called g. dim(x) [1] 55 ?2 dim(df) [1] 13000 ? ?19 I've tried this but it does not seem to work. for(i in rownames(x)){ ? ? g <- grep(paste("^",i,"$",sep=""), df) } any ideas?