2012-09-24 39 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 ,] 

与数据的例子也许有人可以帮助更好的

相关问题