R语言如何筛选dataframe中A、D两列均无NA的行以计算两列比值
实现方法
基础R方案
直接用complete.cases()函数指定仅检查A、D两列即可,该函数会返回布尔值标识对应行的指定列是否全部不存在NA:
# 筛选A、D列均无NA的行 df_filtered <- df[complete.cases(df[, c("A", "D")]), ] # 计算比值 df_filtered$ratio <- df_filtered$A / df_filtered$D
注意不要直接对全表使用
na.omit(),否则会删掉其他列存在NA但A、D列均有效的行,不符合你的筛选需求。
tidyverse/dplyr方案
如果你习惯使用dplyr的管道语法,用filter()搭配is.na()判断即可,一步完成筛选和比值计算:
library(dplyr) df_filtered <- df %>% # 仅保留A、D列都不为NA的行 filter(!is.na(A), !is.na(D)) %>% # 新增比值列 mutate(ratio = A / D)
效果验证
可以构造和你示例结构一致的测试数据验证结果:
# 构造示例数据 df <- data.frame( A = c(NA, 2, NA, 5, NA, 7), B = c("a", "b", "c", "d", "e", "f"), C = c(10, 20, 30, 40, 50, 60), D = c(NA, 2, 3, 10, NA, 1) ) # 筛选后输出的行对应原数据的第2、4、6行,完全符合要求
内容的提问来源于stack exchange,提问作者Teebs
相关产品推荐
相关产品推荐

