2012-07-23 30 views
3

我有四個data.frames,它們都有相同的列,是第一個相同的列。在變量列中有一些NAs。R - 在包含NA的同一列中合併data.frames

首先,我想用data.frame的名稱替換每個data.frame中的任何值(不是NA)。 其次,我想合併data.frames。在這種情況下,對於每個NA,都會有一些其他data.frame,它會爲它設置一個值,以便每個單元填充值(或data.frames的名稱)。

這裏有兩個data.frames一個例子:

>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 

我已經嘗試了一些合併()和工會()選項不同。此外,我試圖對類似問題的答案進行調整,但似乎無法解決此問題。

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

Merging data frames with missing values in R

預先感謝您!

回答

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」任何地方,是ANA。這將是「B」的地方BNA

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

非常感謝得到它!即使對於更復雜的數據,它也能很好地工作。唯一的一點是它在第一列(g1,g2 ...)中引入了NAs,但由於順序沒有改變,它只是將其從其他data.frames中的一個放回去。 – afrendeiro 2012-07-23 09:31:57

4

我寫了一個包正是這個,因爲我多次從人誰是數據庫文盲發送部分重疊的Excel文件。

我把它上傳到了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 

如果你想嘗試一下它是由在CRAN,才能從http://www.anst.uu.se/chrba104/datamerge_1.0-1.tar.gz

+0

謝謝,真的!我應該多花一點錢來了解這樣的軟件包。它完美的工作! 儘管如此,這還是會回答我的問題的一半(最大的一半,是的),因爲我想改變內容,所以@ GSee的答案是我設法做到這兩點。 順便說一下,該軟件包已經可以從CRAN下載。 – afrendeiro 2012-07-23 09:32:54

+0

此外,此功能的另一個優點是您可以一次合併多個數據幀。謝謝! – afrendeiro 2012-07-23 09:49:31

+0

不客氣!如果它不適合你的問題,那麼這個軟件包仍然會潛伏在我的硬盤上。 – Backlin 2012-07-23 15:53:57