我正在寻找一种方法来删除所有跨变量的值不匹配的行,除非缺少匹配是由于其中一个(或多个)值为NA。
df <- data.frame(uid = c(1, 2, 3, 4, 5, 6, 7),
x1 = c('a', NA, NA, 'a', 'a', 'c', 'b'),
x2 = c(NA, 'b', NA, NA, NA, NA, 'b'),
x3 = c(NA, NA, 'c', 'a', 'b', NA, 'b'),
x4 = c(NA, NA, NA, NA, NA, NA, 'b'),
x5 = c(NA, NA, NA, NA, NA, 'b', 'b'))
df
uid x1 x2 x3 x4 x5
1 1 a <NA> <NA> <NA> <NA>
2 2 <NA> b <NA> <NA> <NA>
3 3 <NA> <NA> c <NA> <NA>
4 4 a <NA> a <NA> <NA>
5 5 a <NA> b <NA> <NA>
6 6 c <NA> <NA> <NA> b
7 7 b b b b b
我正在寻找的是一个可以删除第5行和第6行的方法。我尝试了几种使用subset的方法,如果我这样做的话,我能够让它工作:
subset(df, (x1 == x2 | is.na(x1) | is.na(x2)) & ...
(x4 == x5 | is.na(x4) | is.na(x5)))
但是,我找不到一种方法不需要输入每个组合,这对于只有5列的情况来说已经不切实际了,但是对于实际的数据集来说,这根本不切实际。
2条答案
按热度按时间lrpiutwd1#
不是最干净的解决方案,但我做了一个函数,达到了结果。
图书馆
数据
代码
输出
o2gm4chl2#
删除感兴趣列中唯一非NA值的数量超过1的行: