2015-05-23 41 views
7

我有兩個數據幀,第一個包含9994行,第二個包含60431行。我想合併兩個數據幀,使合併的數據幀包含兩個數據幀的組合列,但只包含9994行。在R中合併導致比其中一個數據幀更多的行

但是,合併後我得到了超過9994行。我怎樣才能確保這不會發生?

df1 = readRDS('data1.RDS') 
nrow(df1) 
# [1] 9994 

df2 = readRDS('data2.RDS') 
nrow(df2) 
# [1] 60431 

df = merge(df1,df2,by=c("col1","col2")) 
nrow(df) 
# [1] 10057 

df = merge(df1,df2,by=c("col1","col2"),all.x=TRUE) 
nrow(df) 
# [1] 10057 
nrow(na.omit(df)) 
# [1] 10057 

編輯:繼akrun的評論。 是的,有在所述第二數據幀

nrow(unique(df2[,c("col1","col2")])) 
# [1] 60263 
nrow(df2) 
# [1] 60431 

我怎樣才能採取只有一排從數據幀,如果有多個用於相同{COL1,COL2}組合重複。當我合併時,我想只有9994行。

+2

你能檢查每個數據集中'col1'和'col2'是否有重複嗎?如果是這種情況,您可以創建一個序列索引,按照每個數據集中的「col1」和「col2」進行分組,並通過「col1」,「col2」和「indx」進行合併。另一種選擇是使用'match'。但是,沒有一個小例子,很難測試 – akrun

+0

@akrun,謝謝akrun。上面我做了一個修改。請參見。我怎樣才能只採取行col1,col2組合,以便結束與合併後的第一個數據幀中的行數? – PepperBoy

+3

您可能需要按照前面的評論創建序列索引。沒有示例數據,測試並不容易。請顯示一些可重複的示例 – akrun

回答

0

這應該工作,一定要排序df2首先讓您選擇正確的行。

df = merge(
    df1, 
    df2[!duplicated(df2[, c("col1","col2")], ], 
    by=c("col1","col2"), 
    all.x=TRUE 
) 
相關問題