首页 > 解决方案 > 如何从一个基于 NA 的两个数据帧中删除具有 NA 的行?

问题描述

我正在尝试NA从 df2 中删除与 df1 中相同的行。例如。

df1
    A
1   1
2   NA
3   7
4   NA


df2
    A B C D
1   2 4 7 10
2   3 6 1 3
3   9 5 1 3
4   4 9 2 5

预期结果:

df1
    A
1   1
3   7


df2
    A B C D
1   2 4 7 10
3   9 5 1 3

我已经尝试过......

newdf <- df2[-which(rowSums(is.na(df1))),]

noNA <- function(x) { x[!rowSums(!is.na(df1)) == 1]}
NMR_6mos_noNA <- as.data.frame(lapply(df2, noNA))

或者

noNA <- function(x) { x[,!is.na(df1)]}
newdf3 <- as.data.frame(lapply(df2, noNA))

标签: rdataframena

解决方案


我们可以is.na用来创建一个逻辑条件并使用它来子集“df1”和“df2”的行

i1 <- !is.na(df1$A)
df1[i1, , drop = FALSE]
#  A
#1 1
#3 7

df2[i1,]
#   A B C  D
# 1 2 4 7 10
#3 9 5 1  3

推荐阅读