2012-07-23 2 views
3

나는 모두 동일한 열을 갖는 네 개의 data.frames를 가지고 있습니다. 변수 열에는 일부 NAs가 있습니다.R - NA를 포함하는 동일한 열에서 data.frames 합치기

먼저 각 data.frame의 모든 값 (NA가 아닌 값)을 data.frame의 이름으로 대체하고 싶습니다. 둘째, data.frames를 병합하고 싶습니다. 이 경우 각 NA에는 값 (또는 data.frames의 이름)이 채워진 모든 셀로 끝날 수 있도록 값이있는 다른 data.frame이 있습니다. 나는 다른 일부 병합()와 노동 조합() 옵션을 시도했습니다

>A 
name Q W E R T 
g1 NA NA 4 NA 0 
g2 3 2 NA 4 5 
g3 NA 1 NA 0 0 
g4 0 NA NA 1 9 

>B 
name Q W E R T 
g1 2 4 NA 1 NA 
g2 NA NA 5 NA NA 
g3 5 NA 0 NA NA 
g4 NA 6 4 NA NA 

>result 
name Q W E R T 
g1 B B A B A 
g2 A A B A A 
g3 B A B A A 
g4 A B B A A 

:

여기에 두 data.frames과 예입니다. 또한 비슷한 질문에 대한 답변을 시도했지만 해결할 수 없습니다. Merging data frames with missing values in R

Creating a function to replace NAs from one data.frame with values from another

사전에 감사합니다!

답변

4

이 있지만, 제공되는 데이터에 대한, 당신을 위해 잘 일반화하지 않을 수 있습니다 ...

A <- data.frame(Q=c(NA, 3, NA, 0), 
       W=c(NA, 2, 1, NA), 
       E=c(4, NA, NA, NA), 
       R=c(NA, 4, 0, 1), 
       T=c(0,5,0,9), row.names=paste0('g', 1:4), stringsAsFactors=FALSE) 

B <- data.frame(Q=c(2, NA, 5, NA), 
       W=c(4, NA, NA, 6), 
       E=c(NA, 5, 0, 4), 
       R=c(1, NA, NA, NA), 
       T=c(NA, NA, NA, NA), row.names=paste0('g', 1:4), stringsAsFactors=FALSE) 

결과가 될 것이다 "A"는 어디 A입니다 NA 없습니다. B 내가 반복적으로 데이터베이스 문맹 인 사람들에서 부분적으로 중복되는 엑셀 파일을 전송하고 나는이 정확하게 이것에 대한 패키지를 작성했습니다 NA

result <- A 
result[!is.na(A)] <- "A" 
result[!is.na(B)] <- "B" 

# Q W E R T 
#g1 B B A B A 
#g2 A A B A A 
#g3 B A B A A 
#g4 A B B A A 
+0

고마워에서 얻을 수 있습니다 당신이 CRAN에이야 전에 그것을 시도하십시오! 더 복잡한 데이터에서도 정말 잘 작동합니다. 유일한 것은 첫 번째 열 (g1, g2 ...)에 NAs를 도입하지만, 순서가 변경되지 않았기 때문에 다른 데이터 프레임 중 하나에서 다시 가져 오는 문제 일뿐입니다. – afrendeiro

4

없는 곳이 "B"가 될 것입니다.

CRAN에 업로드했으며 조만간 제공 될 예정입니다. 무엇 다음해야 할 것은이

> install.packages("datamerge") 
> library(datamerge) 
> version.merge(A, B, add.values=TRUE) 
Rows: 4 from `A` #1 
     0 from `B` #2 

Columns: 
Q Origin: `A` #1 
    Imputed 2 values from `B` #2 
W Origin: `A` #1 
    Imputed 2 values from `B` #2 
E Origin: `A` #1 
    Imputed 3 values from `B` #2 
R Origin: `A` #1 
    Imputed 1 values from `B` #2 
T Origin: `A` #1 
    Q W E R T 
g1 2 4 4 1 0 
g2 3 2 5 4 5 
g3 5 1 0 0 0 
g4 0 6 4 1 9 

당신이 http://www.anst.uu.se/chrba104/datamerge_1.0-1.tar.gz

+0

정말 고마워요! 이런 패키지를 아는 데 조금 더 투자해야합니다. 그것은 완벽하게 작동합니다! 그래도 내용을 변경하고 싶기 때문에 이것은 내 질문의 절반 (가장 큰 부분, 예)으로 대답 할 것입니다. 따라서 @ GSee의 대답으로 나는 둘 다 할 수 있습니다. 그런데 패키지는 이미 CRAN에서 다운로드 할 수 있습니다. – afrendeiro

+0

또한이 기능의 또 다른 장점은 한 번에 여러 data.frames를 병합 할 수 있다는 것입니다. 감사! – afrendeiro

+0

여러분을 환영합니다! 귀하의 질문을하지 않았다면 패키지는 여전히 내 하드 드라이브에 숨어있을 것입니다. – Backlin

관련 문제