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

基于另一数据框区间筛选匹配观测值的R语言问题

解决方案

先模拟示例数据方便测试(可替换为你的真实数据):

# 模拟GranLoc数据框:包含类别和区间上下限
GranLoc <- data.frame(
  class = c("A", "B", "C"),
  LimAm = c(0, 10, 20),
  LimAv = c(10, 20, 30)
)

# 模拟Slope_dist数据框:包含Position和其他观测值
Slope_dist <- data.frame(
  Position = c(5, 12, 18, 25, 8, 22),
  Value = c(1.2, 3.4, 2.1, 4.5, 0.9, 3.8)
)

方法1:Base R 实现(无需额外包)

apply默认会把数据框转为矩阵处理,易因类型不匹配出错,改用lapply遍历行索引更可靠:

# 生成筛选后的列表
result_list <- lapply(1:nrow(GranLoc), function(i) {
  lower <- GranLoc$LimAm[i]
  upper <- GranLoc$LimAv[i]
  # 筛选Position落在[lower, upper)区间的行,可根据需求改为<= upper
  Slope_dist[Slope_dist$Position >= lower & Slope_dist$Position < upper, ]
})

# 给列表命名,对应GranLoc的class列
names(result_list) <- GranLoc$class

方法2:tidyverse 风格实现

若习惯tidyverse工具链,用purrr::map更简洁:

library(tidyverse)

result_list <- GranLoc %>%
  split(.$class) %>%  # 按class拆分GranLoc
  map(function(group) {
    Slope_dist %>%
      filter(Position >= group$LimAm, Position < group$LimAv)  # 区间筛选
  })

两种方法最终都会得到一个列表,每个元素对应GranLoc中一个class的筛选结果,列表名称与class一一对应。

内容的提问来源于stack exchange,提问作者C. Guff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 00:32:43