2012-09-17 4 views
0

은 내가 이런 상황이경기 및 일부

COL1 COL2 COL3 
    a  e h 
    b  f i 
    c  g l 
    d 

및 data.frame2

Gene VAL 
    a 3 
    b 7 
    c 0.5 
    d 3.7 
    e 9.08 
    f 1.3 
... ... 

첫 번째 data.frame의 각 COL을 data.frame2와 일치시키고 부분 화하고 싶습니다 (f 제 data.frame의 IRST 열) 반복적으로 다음과 같은 출력을 갖기 위해 :

아웃 : data.frame3

COL1 VAL  COL2 VAL 
    a  3  e 9.08 
    b  7  f 1.3 
    ... ...  .... .... 

어떤 제안?

감사

답변

1

이이 기능 lapply 수행 할 수 있습니다 :

data.frame1 <- data.frame(COL1 = letters[1:3], COL2 = c(NA, letters[5], NA)) 
data.frame2 <- data.frame(Gene = letters[1:6], VAL = rnorm(6)) 

do.call("cbind", 
    lapply(data.frame1, 
    function(x) { VAL <- rep(NA, ncol(data.frame1)); 
     VAL[!is.na(x)] <- data.frame2$VAL[data.frame2$Gene %in% na.omit(x)]; 
     return(data.frame(x, VAL)) })) 

# COL1.x COL1.VAL COL2.x COL2.VAL 
#1  a 0.1601884 <NA>  NA 
#2  b -0.2035409  e -1.535597 
#3  c -0.6661004 <NA>  NA 
+0

중대한 제안,하지만 문제와. data.frame1에는 귀하의 경우 행 수가 같은 열이 있습니다. 제 경우에는 첫 번째 data.frame은 컬럼 당 다른 수의 행을 가지고 있습니다 ... R은 다른 행 길이의 입력 데이터를 읽는 데 문제가 있다는 것을 알고 있습니다 .. – Elb

+0

데이터 프레임의 행 길이는 항상 동일합니다. 몇 가지 예제 데이터를 제공하십시오. 'str (data.frame1)'의 결과는 무엇입니까? –

+0

행렬처럼 보입니다. 그러나 행 길이는 동일해야합니다. 행이 "불완전한"값은 무엇입니까? –