2011-10-03 3 views
0

서로 다른 차원을 가진 두 개의 R 데이터 프레임이 있습니다. 그러나하지만 데이터 프레임이 id 열을가다른 데이터 프레임을 반복하여 데이터 프레임의 요소를 매핑

DF1 :

nrow(df1)=22308 

        c1  c2  c3   pattern1.match 
ENSMUSG00000000001_at 10.175115 10.175423 10.109524    0 
ENSMUSG00000000003_at 2.133651 2.144733 2.106649    0 
ENSMUSG00000000028_at 5.713781 5.714827 5.701983    0 

DF2 :

       Genes Pattern.Count 
ENSMUSG00000000276 ENSMUSG00000000276_at    1 
ENSMUSG00000000876 ENSMUSG00000000876_at    1 
ENSMUSG00000001065 ENSMUSG00000001065_at    1 
ENSMUSG00000001098 ENSMUSG00000001098_at    1 

nrow(df2)=425 

내가 df2을 통해 루프, 그리고 pattern.count=1이있는 모든 유전자를 찾을 것이며, df1$pattern1.match 열에 확인하십시오.

기본적으로 GENESpattern1.matchdf2$Genesdf2$Pattern.Count으로 덮어 쓰고 싶습니다. df2$Pattern.Count의 모든 요소는 1과 같습니다.

이 함수를 작성했지만이 모든 행을 반복하면서 R이 동결됩니다.

idcol <- ncol(df1) 
return.frame.matches <- function(df1, df2, idcol) { 
    for (i in 1:nrow(df1)) { 
     for (j in 1:nrow(df2)) 
       if(df1[i, 1] == df2[j, 1]) { 
        df1[i, idcol] = 1 
        break 
       }  
    } 
    return (df1) 
} 

컴퓨터를 거의 죽이지 않고 다른 작업을 수행 할 수 있습니까?

답변

0

나는 당신이하는 일을 정확히 이해할 수는 없지만, 다음은 적어도 당신을 가까이해야합니다.

df1의 첫 번째 열에는 이름이없는 것 같습니다. rownames입니까?

그렇다면

,

df1$Genes <- rownames(df1) 

그런 다음 당신은 당신이 필요로하는 유전자와 새로운 dataframe을 만들기 위해 merge을 할 수있는 : 그들은 일반적인 열 Genes에 일치하는

merge(df1,subset(df2,Pattern.Count==1)) 

참고. pattern1.match 열을 사용하여 무엇을하고 싶은지 확실하지 않지만 부분의 subset 부분에 merge의 조건을 포함 할 수 있습니다. 코멘트에 추가 정보로가는

편집

,
df1$pattern1.match <- as.numeric(df1$Genes %in% df2$Genes) 

당신이 찾고있는 무엇을 달성해야한다.

+0

그래서 저는 df1- 메인 데이터 프레임을 가지고 있고, int를 df1 $ pattern.match 컬럼에서 확인하고 싶습니다. 어떤 유전자가 df2에서 발견 될 수 있습니까? 기본적으로 df2의 유전자는 df1에 포함되어 있습니다. 유전자가 df2 – agatha

+0

패턴에서 발견되었을 때 df1 $ pattern.match의 요소를 1로 표시함으로써 Pattern을 찾습니다.Count 열은 이미 다른 데이터 세트에서 추출되었으므로 요소 만 = 1입니다. – agatha

+0

OK, 문제 해결에 더 좋은 솔루션이 있습니다. – James

0

샘플 데이터는 함께 놀러하는 것만으로는 충분하지 않습니다, 그러나 여기에서 I로 시작하는 것 인 것이다 :

dfm <- merge(df1, df2, by = idcol, all = TRUE) 
dfm_pc <- subset(dfm, Pattern.Count == 1) 

내가 코드에서 "idcol"을했다, 데이터에 표시되지 않습니다.

+0

col = ncol (df1), df2에서 찾을 수있는 df1 $ pattern1.match에서 마킹하는 df2..like의 마지막 열을 업데이트하려고하므로 ... – agatha

관련 문제