2012-09-24 40 views
2

我正在根據多個因子(鍵)變量合併兩個數據框,一個主數據集和一個查找表,並且我想快速查看主數據中這些關鍵變量的組合在查找表中不匹配。合併函數中是否有一個選項允許我這樣做?我現在所能想到的最好的辦法是使用all.x = T選項,然後查看我合併的其中一個變量是NA的行。當然,必須有一個更好的辦法...從合併中返回不匹配的記錄

這裏是我的代碼,它的價值:

a.lighting.all.2 <- merge(a.lighting.all.2, a.lookup.by.meas.2, 
          by = c("measure.category", "measure.subcategory", 
           "measure", "fund.category")) 
+0

什麼是錯的只是使用'NA'弄清楚哪些行不匹配? – Maiasaura

回答

1

以下是用於比較具有相同標題的兩個data.frames的功能:

df.diff <- function(df1, df2) { 
    is.dup <- duplicated(rbind(df2, df1)) 
    is.dup <- tail(is.dup, nrow(df1)) 
    df1[!is.dup, ] 
} 

所以,你可以運行:

df.diff(main[by.cols], lookup[by.cols]) 
+0

不錯。我希望有一種內置的方式來做到這一點,但這是一個不錯的優雅解決方案。對大數據集進行質量控制是否有很好的方法,或者大多數人只是編寫他們自己的定製QC功能? –

2

至於我可以看到合併沒有這個選項,但是子集將由NAS雖然很快捷方便。

df  <- data.frame(cat=c("a","a","b","b"),num=(1:4)) 
df2  <- data.frame(cat=c("a","a","b","c"),num=(1:4)) 
mergedf <- merge(df,df2,by="cat",all=TRUE) 
mergedf 
mergedf [rowSums(is.na(mergedf))>0 ,] # not if you have NAs already before merge 

你也可以做這樣的事情:

df2 [ !df2$cat %in% df$cat ,] 

和特定的行不合並:

df$ID <- 1:length(df[,1]) 
df2$ID <- (length(df[,1])+1):(length(df[,1])+length(df2[,1])) 
mergedf <- merge(df,df2,by="cat", all=FALSE) 

df2 [!df2$ID %in% mergedf$ID.y ,] 

與數據的例子也許有人可以幫助更好的

相關問題