2016-06-22 4 views
2

가 I이필링 NAS는

c 
      Freq  CTM 
000110100111 2  NA 
110110100111 1 32.58847 
111001011000 2  NA 
111111111111 1 25.61041 

같은 데이터 프레임 c 내가 cCTM 열에 NAS를 바꾸려이

nona_c 
      Freq  CTM 
000110100111 2 37.0642 
111001011000 2 37.0642 

같은 데이터 프레임 nona_c를 병합 CTM 값은 nona_c입니다. nona_c (이진 문자열)의 rownames는 항상 c에 있습니다. 내가 여기에 성공하지 merge을하려고했는데

mergedC 
      Freq  CTM 
000110100111 2 37.0642 
110110100111 1 32.58847 
111001011000 2 37.0642 
111111111111 1 25.61041 

출력해야한다.

mergedC <- merge(x = c, y = nona_c, by = 0, #rownames 
    all.y = TRUE) 
+3

참고 사항; 특히'? c' 함수가 주어지면 'c'라는 객체를 보는 것이 이상합니다. 문제가 발생할 수 있습니다. – SymbolixAU

답변

4

match 작업이 더 간단 할 수 있습니다

c$CTM[is.na(c$CTM)] <- nona_c$CTM[match(rownames(c)[is.na(c$CTM)], rownames(nona_c))] 

#    Freq  CTM   id 
#000110100111 2 37.06420 000110100111 
#110110100111 1 32.58847 110110100111 
#111001011000 2 37.06420 111001011000 
#111111111111 1 25.61041 111111111111 
2

우리는이 on 관심있는 변수를 조인을 사용 data.table이 작업을 수행 할 수 있습니다. 여기에 행 이름 열에 합류합니다. "i.CTM"의 값은 'CTM'에 할당됩니다 (:=).

library(data.table) 
setDT(c, keep.rownames=TRUE)[] 
setDT(nona_c, keep.rownames=TRUE)[] 

c[nona_c, CTM := i.CTM , on = "rn"] 
c 
#    rn Freq  CTM 
#1: 000110100111 2 37.06420 
#2: 110110100111 1 32.58847 
#3: 111001011000 2 37.06420 
#4: 111111111111 1 25.61041 

참고 : row.names는 data.table 또는 dplyr에서 유지되지 않습니다. 따라서 'data.frame'을 'data.table'로 변환하는 동안 keep.rownames = TRUE을 사용합니다.

관련 문제