Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从合并中返回不匹配的记录_R_Merge - Fatal编程技术网

R 从合并中返回不匹配的记录

R 从合并中返回不匹配的记录,r,merge,R,Merge,我正在基于多个因子(关键)变量合并两个数据帧,一个主数据集和一个查找表,我想有一个快速的方法来查看主数据中这些关键变量的哪些组合在查找表中不匹配。合并函数中是否有允许我执行此操作的选项?目前我能想到的最好方法是使用all.x=T选项,然后查看我合并的变量之一是NA的行。肯定有更好的方法 这是我的代码,值得一提的是: a.lighting.all.2 <- merge(a.lighting.all.2, a.lookup.by.meas.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"))

a.lighting.all.2据我所知,merge没有这个选项,但是通过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
对于未合并的特定行:

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 ,]

df$ID这里有一个函数,用于区分具有相同标题的两个data.Frame:

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

library(data.table)
df1      <- data.table(cat=c("a","a","b","b"),num=(1:4))
   cat num
1:   a   1
2:   a   2
3:   b   3
4:   b   4

df2     <- data.table(cat=c("a","a","b","c"),num=(1:4))
   cat num
1:   a   1
2:   a   2
3:   b   3
4:   c   4

df1[!df2, on=.(cat,num)]
   cat num
1:   b   4

df2[!df1, on=.(cat,num)]
   cat num
1:   c   4
库(data.table)

df1仅使用
NA
来找出哪些行不匹配有什么错?很好。我希望有一个内置的方式来实现这一点,但这是一个很好的优雅的解决方案。是否有一个很好的软件包用于对大型数据集进行质量控制,或者大多数人只是编写自己的定制质量控制函数?
df.diff(main[by.cols], lookup[by.cols])
library(data.table)
df1      <- data.table(cat=c("a","a","b","b"),num=(1:4))
   cat num
1:   a   1
2:   a   2
3:   b   3
4:   b   4

df2     <- data.table(cat=c("a","a","b","c"),num=(1:4))
   cat num
1:   a   1
2:   a   2
3:   b   3
4:   c   4

df1[!df2, on=.(cat,num)]
   cat num
1:   b   4

df2[!df1, on=.(cat,num)]
   cat num
1:   c   4