比较包含NA值的数据框行

3

我有一个包含两列的数据框:

x <- c(1, 2, 3, 4, NA, 5, 6)
y <- c(1, 2, 4, 5, 0, 5, 6)

my.df <- data.frame(x, y)

我希望保留x != y的行。

我的做法如下:

my.df <- subset(my.df, x != y)

What I expected was:

x  y
3  4
4  5
NA 0

我得到的是

x  y
3  4
4  5

这是因为,按照奇怪的惯例,NA != 0 的结果是 NA
我真的希望保留子集中的 NA,因为我正在寻找列之间的差异。
如何实现这一点?

1
只是针对“奇怪的约定”进行评论:据我回忆,在R中,“NA”不被视为一个值,因此像“!=”这样的条件无法评估,导致既不是“TRUE”也不是“FALSE”,而是“NA”。 - LAP
我认为最好将所有的NA值替换为数字代码,如999,然后在必要时再进行转换。my.df[is.na(my.df)] <- 999 - James Theobald
2个回答

5

这也可以实现。 仅选择x和y相减不等于零的行。

my.df[!((x-y) %in% 0 ),]

4

一种选择是创建一个 | 条件来获取那些 'x' 列为 NA 的行。

subset(my.df, x != y | is.na(x))

如果'y'中也有NA元素
subset(my.df, x != y | is.na(x)|is.na(y))

对于'x'和'y'同时为NA的情况,不清楚应该如何处理。如果需要将它们视为相同,则需要将其排除。

subset(my.df, (x != y | is.na(x)|is.na(y)) & !(is.na(x) & is.na(y)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接