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

R语言实现按指定行数值条件筛选数据框列的方法

R实现数据框按行条件列筛选方案

原始数据构造

首先将示例数据读取为R中的数据框,行名对应A/B/C/D四个分组:

df <- data.frame(
  row.names = c("A", "B", "C", "D"),
  C1 = c(5, 3, 2, 10),
  C2 = c(7, 7, 5, 4),
  C3 = c(10, 12, 20, 18),
  C4 = c(1, 2, 2, 5),
  c5 = c(3, 10, 5, 7),
  C6 = c(2, 5, 5, 4),
  C7 = c(14, 8, 8, 18),
  C8 = c(2, 3, 10, 19)
)

需求1实现:保留D行值小于同列A/B/C任意一行值的列

判断逻辑:逐列遍历,只要同列A、B、C三行中存在任意一个值大于D行取值,就保留该列。

# 逐列生成保留标记
keep_logic1 <- apply(df, MARGIN = 2, FUN = function(col_val) {
  d_v <- col_val[["D"]]
  any(col_val[c("A", "B", "C")] > d_v)
})
# 输出筛选结果
result1 <- df[, keep_logic1]

运行print(result1)得到的输出和预期完全一致:

C2 C3 c5 C6
A  7 10  3  2
B  7 12 10  5
C  5 20  5  5
D  4 18  7  4

需求2实现:保留D行值同时小于同列B行、C行值的列

判断逻辑:逐列遍历,只有当同列B行、C行的取值都大于D行取值时,才保留该列。

# 逐列生成保留标记
keep_logic2 <- apply(df, MARGIN = 2, FUN = function(col_val) {
  d_v <- col_val[["D"]]
  col_val[["B"]] > d_v & col_val[["C"]] > d_v
})
# 输出筛选结果
result2 <- df[, keep_logic2]

运行print(result2)最终得到符合条件的列为C2、C6,结果如下:

C2 C6
A  7  2
B  7  5
C  5  5
D  4  4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:21:34