检查两个或多个列或向量之间的所有非 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))
我在数据框中有两列包含左外连接后的日期信息。由于联接的样式,其中一个日期列现在包含 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))