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

如何基于数值递增规则筛选矩阵或数据框中的列?

筛选数据框中列方向严格递增的列

示例数据

你的示例数据可通过以下R代码生成:

df <- data.frame(
  A=c(10,15,18,20),
  B=c(85,74,65,64),
  C=c(0,0,0,0),
  D=c(115,125,130,150)
)

原数据结构:

A  B C   D
1 10 85 0 115
2 15 74 0 125
3 18 65 0 130
4 20 64 0 150

你需要筛选出沿列方向严格递增的列,目标结果如下:

A   D
1 10 115
2 15 125
3 18 130
4 20 150

高效解决方案(适配大数据量)

针对大规模数据,推荐以下两种高效实现方式:

方法1:基础R原生实现

利用apply结合diff函数快速判断列的递增性:

# 筛选严格递增的列
filtered_df <- df[, apply(df, 2, function(col) all(diff(col) > 0))]

逻辑说明

  • apply(df, 2, ...):遍历数据框的每一列(参数2指定列方向)
  • diff(col):计算列内相邻元素的差值
  • all(diff(col) > 0):验证该列所有相邻差值均为正,即列元素严格递增
  • 通过列索引直接筛选符合条件的列,原生R操作效率极高,适合大数据处理

如果需要允许列内存在相等元素(非严格递增),只需将判断条件改为all(diff(col) >= 0)即可。

方法2:tidyverse/dplyr实现

若熟悉tidyverse生态,可使用dplyr的select + where语法,代码可读性更强:

library(dplyr)

filtered_df <- df %>%
  select(where(function(col) all(diff(col) > 0)))

这个方法同样保持了高效性,同时符合tidyverse的代码风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:45:36