You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:15:06