在数据帧之间找到相等的行,包括NA作为值

问题描述 投票:1回答:2

我有两个数据框:

df = structure(list(x = c(NA, NA, "b", "b", "b"), y = c("f", "f", 
"f", "g", "g")), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

df2 = structure(list(x = c(NA, NA, "a", "b", "b"), y = c("g", "f", 
"f", "g", "g")), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

当考虑NA作为值时,我想找到相同的行。

df == df2

据此,第二行应为“TRUE”。相反,我们得到NA。虽然这个逻辑很清楚,但我们可以修改df == df2以使这些行被认为是相等的吗?

r dataframe missing-data
2个回答
1
投票

一个选项是replace NA,其值不在数据集中,进行比较,并检查所有行是否与rowSums相等

rowSums(replace(df2, is.na(df2), "0") == replace(df, is.na(df), "0"))== 2
#[1] FALSE  TRUE FALSE  TRUE  TRUE

或者无需替换,使用is.na创建逻辑条件

rowSums((!is.na(df) & df== df2)|(is.na(df))) == ncol(df)

1
投票

你可以paste和比较,即

do.call(paste, df) == do.call(paste, df2)
#[1] FALSE  TRUE FALSE  TRUE  TRUE
© www.soinside.com 2019 - 2024. All rights reserved.