检查两个或多个列或向量之间的所有非 NA 元素是否相同

Checking if all non-NA elements between two or more columns or vectors are identical

我在数据框中有两列包含左外连接后的日期信息。由于联接的样式,其中一个日期列现在包含 NA。我想检查这些列之间的所有非 NA 值是否相同。示例如下:

date 1     date 2
1/1/21     NA 
1/2/21     1/2/21
1/3/21     NA
1/4/21     1/4/21

如果所有非 NA 值都匹配,我不需要第二列

在我进行左外连接之前,我进行了一次外连接,语句如下:

identical(df[['date 1']], df[['date 2']])

返回 true,因为两列中的每一行确实相同

有没有办法在忽略“日期 2”中包含“NA”的所有行的同时使用此语句或类似语句?

我找到了解决方法:

首先,创建一个只存储这两列的新数据框。您想要创建新数据框的原因是因为我们将在下一步中使用 na.omit,这将删除任何列中包含 1 个或多个“NA”的行。

df2 <- df[, c("date 1", "date2")]

然后删除任何列中包含“NA”的所有行

df2 <- na.omit(df2)

最后,运行 identical 检查其余列是否确实相同

identical(df2[['date1']], df2[['date2']])

我确定有更优雅的方法,但这同时对我有用

您可以通过过滤 df 来测试空值和不匹配值,然后检查是否存在。

df_mismatch = df[(df['date 2'].notnull()) & (df['date 1'] != df['date 2'])]

if len(df_mismatch) > 0:
    print('found this many mismatches:', len(df_mismatch))