【发布时间】:2017-03-07 22:55:41
【问题描述】:
我想从我的数据集中删除所有在两列中为 NA 的行。如果一行在任一列中都有非 NA 值,我想保留它。我该怎么做?
【问题讨论】:
我想从我的数据集中删除所有在两列中为 NA 的行。如果一行在任一列中都有非 NA 值,我想保留它。我该怎么做?
【问题讨论】:
你可以这样做
library(tidyverse)
df <- data.frame(a = c(2, 4, 6, NA, 3, NA),
b = c(5, 4, 8, NA, 6, 7))
df1 <- df %>%
filter(is.na(a) == FALSE | is.na(b) == FALSE)
你会得到:
> df1
a b
1 2 5
2 4 4
3 6 8
4 3 6
5 NA 7
【讨论】:
library(dplyr),除非你真的需要整个tidyverse。
这里有几个base R 建议。遍历数据集的列,将其转换为逻辑向量,并通过将每个对应元素与Reduce 进行比较来折叠逻辑向量,否定输出并将数据集子集
df[!Reduce(`&`, lapply(df, is.na)),]
或将逻辑矩阵 (!is.na(df)) 转换为逻辑 vector 以对数据集进行子集化
df[rowSums(!is.na(df))>0,]
df <- data.frame(a = c(2, 4, 6, NA, 3, NA),
b = c(5, 4, 8, NA, 6, 7))
【讨论】: