r中两种数据帧的比较

r中两种数据帧的比较,r,dataframe,R,Dataframe,我需要比较两个数据帧,它们解释了相同的事情,但它们来自不同的获取方式 因此,我需要获得一个df,其中每个值都与另一个df上的相应值进行比较,如果值相同,则为TRUE,如果值不相同,则为FALSE 为了更好地解释,我写了一个例子: df1 >13 >1在GC CC >2 AG GC-CT >3 GG TT df2 >13 >吉隆坡1号 >2 AG GC CG >3 GG TT AA 结果 > 1 2 3 > 1 TRUE <NA> FAL

我需要比较两个数据帧,它们解释了相同的事情,但它们来自不同的获取方式

因此,我需要获得一个df,其中每个值都与另一个df上的相应值进行比较,如果值相同,则为TRUE,如果值不相同,则为FALSE

为了更好地解释,我写了一个例子:

df1

>13
>1在GC CC
>2 AG GC-CT
>3 GG TT
df2

>13
>吉隆坡1号
>2 AG GC CG
>3 GG TT AA
结果

>      1     2     3  
> 1 TRUE <NA>  FALSE 
> 2 TRUE TRUE  FALSE 
> 3 TRUE TRUE  <NA>
>13
>1对错
>2真假
>3对对对
我在这里看到了一个结果

但在我的df中,如果其中一个df有NA(R给了我TRUE),则df不起作用

另外,我认为如果我在
mapply()
中更改df的顺序,我将获得相同的结果,但在我的例子中不是这样。数据帧也有不同的级别,因此
df1==df2
不起作用

我也会问你,我将如何计算结果中的错误。有类似于Is.na()的东西吗


谢谢大家

我们可以用
==
得到一个逻辑矩阵

(df1 == df2) & !is.na(df1) & !is.na(df2)
#    1     2     3
#1 TRUE FALSE FALSE
#2 TRUE  TRUE FALSE
#3 TRUE  TRUE FALSE

如果列是
factor
class,那么我们可以将colwise与
mapply/Map

mapply(function(x, y) {i1 <- as.character(x)==as.character(y)
         replace(i1, is.na(i1), FALSE)}, df1, df2)

另一个可能的选择

df1 == replace(df2, is.na(df2), 'NA')
或者,如果两个数据帧都包含NAs

replace(df1, is.na(df1), 'NA') == replace(df2, is.na(df2), 'NA')

我得到了这个错误:
Ops.factor中的错误(左、右):因子的级别集不同
@mppd最好比较
字符
类列,
df1[]我看到如果在一个df中我有NA,最后我有NA,但如果它是一个错误的语句。例如,如果df1中的AT与df2中的AA不同,我如何维护NA,如果df1中的AT与df2中的AA不同,我如何维护NA?在这种情况下,您只需删除
is.NA
中的一个,即
(df1==df2)&!is.na(df2)
非常有用!你成就了我的一天(和我的工作)。非常感谢。它不起作用。它纠正了na的错误,但给出了一个真正的值。所以,如果你有两个值'NA'和'NA',你想让它显示为FALSE吗?不,如果在df1中有AG,在df2中有NA,我看到FALSE,这是好的,但是在你的代码中,如果在df1 AG和df2 TT中,我会看到TRUE,这不是我需要的。我希望能更好地解释now@mppd我觉得这是假的。我得到与您相同的结果,我在
df1[]之前进行了设置
m1 <- as.matrix(df1) == as.matrix(df2)
m1[is.na(m1)] <- FALSE
df1 == replace(df2, is.na(df2), 'NA')
replace(df1, is.na(df1), 'NA') == replace(df2, is.na(df2), 'NA')