R语言如何删除数据框中所有值均为NA的整行数据
基础R实现
你可以通过rowSums()结合非NA判断快速实现需求,代码如下:
# df替换为你的数据框名称 df_filtered <- df[rowSums(!is.na(df)) > 0, ]
逻辑说明:!is.na(df)会将原数据框转换为逻辑矩阵,非NA值对应TRUE、NA对应FALSE,rowSums()统计每行TRUE的数量也就是非NA值的数量,筛选出数量大于0的行,就是至少有一个有效信息的行。
tidyverse(dplyr)实现
目前filter_all已经被官方弃用,推荐使用if_any()搭配filter()实现,代码如下:
library(dplyr) df_filtered <- df %>% filter(if_any(everything(), ~ !is.na(.x)))
逻辑说明:if_any(everything())会遍历数据框的所有列,只要任意一列满足「非NA」的条件,就会保留当前行,写法更符合tidyverse的语法规范。
两种方法最终输出的结果都和你预期的一致,会保留第3、第7行,删除所有全为NA的行。
内容的提问来源于stack exchange,提问作者Juan C
相关产品推荐
相关产品推荐

