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

如何在R中保留指定列值为该行最小值的行(含日期列与NA)

在R中筛选保留列B为该行最小值的行

问题说明

数据集共50列,其中48列为Y/m/d h:m:s格式,包含大量NA且不可删除。需要保留列B的值为该行最小值的行,删除不符合条件的行。

示例数据

df <- data.frame(
  A = c(11,19,17,6,13),
  B = c(18,9,5,16,12),
  C = c(14,15,8,87,16))

原始数据输出:

A  B  C
1 11 18 14
2 19  9 15
3 17  5  8
4  6 16 87
5 13 12 16

期望结果

A  B  C
1 19  9 15
2 17  5  8
3 13 12 16

解决方案

方法1:基础R实现

通过apply()计算每行最小值(忽略NA),再筛选出B列等于该行最小值的行:

# 计算每行最小值,忽略NA
row_mins <- apply(df, 1, min, na.rm = TRUE)
# 筛选目标行
result_df <- df[df$B == row_mins, ]

方法2:tidyverse框架实现

使用dplyr的管道语法,按行处理并筛选:

library(dplyr)

result_df <- df %>%
  rowwise() %>%
  # 计算当前行所有列的最小值,忽略NA
  mutate(row_min = min(c_across(everything()), na.rm = TRUE)) %>%
  # 筛选B列等于该行最小值的行
  filter(B == row_min) %>%
  # 移除临时计算的辅助列
  select(-row_min)

关键注意事项

  • 原数据存在大量NA,计算最小值时必须添加na.rm = TRUE,否则含NA的行最小值会返回NA,导致筛选失效。
  • 日期格式列会被R自动转换为数值型进行比较(日期本质是自1970年以来的天数/秒数),无需额外处理,min()函数可正常计算。

内容的提问来源于stack exchange,提问作者ygtmnv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:24:26