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

如何在R中基于两列筛选条件一次性子集化dataframe?

R数据框多条件子集化实现

给定如下结构的R数据框:

catch <- structure(list(fldFinalLength = c(NA, 260L, NA, NA, 460L, NA, 
630L, 1030L, 820L, NA, NA, NA, 710L, 850L, 250L, 380L, 290L, 
NA, NA, 320L, 270L, 740L, NA, 370L, NA, 590L, NA, 510L, NA, 470L, 
340L, NA, NA, NA, 450L, 670L, NA, NA, NA, NA, 680L, 690L, NA, 
270L, 370L, 300L, NA, NA, NA, 450L, 280L, 460L, NA, NA, 370L, 
410L, NA, 760L, 650L, 280L, 550L, NA, 550L, 320L, NA, NA, NA, 
NA, 630L, 940L), fldInitialLength = c(NA, 220L, NA, NA, 460L, 
NA, 630L, 220L, 670L, NA, NA, NA, 170L, 120L, 250L, 250L, 230L, 
NA, NA, 260L, 190L, 470L, NA, 290L, NA, 590L, NA, 160L, NA, 270L, 
310L, NA, NA, NA, 420L, 490L, NA, NA, NA, NA, 250L, 170L, NA, 
110L, 260L, 190L, NA, NA, NA, 220L, 260L, 230L, NA, NA, 250L, 
410L, NA, 760L, 650L, 280L, 550L, NA, 290L, 320L, NA, NA, NA, 
NA, 630L, 940L), fldCatchWeight = c(0.73, 0.672, 61.3, 0.298, 
1.024, 0.206, 1.47, 11.21, 8.06, 0.412, 2.894, 0.674, 67.32, 
34.683, 0.252, 1.774, 0.626, 2.6, 0.34, 1.272, 0.332, 12.12, 
0.014, 1.672, 0.358, 1.53, 0.256, 1.534, 0.162, 6.31, 0.708, 
0.474, 266.23, 0.796, 1.642, 4.35, 1.298, 0.114, 13.86, 20.5, 
63.546, 39.07, 0.686, 1.222, 2.338, 1.244, 9.18, 4.062, 0.428, 
3.692, 0.28, 2.23, 0.182, 0.052, 1.252, 0.614, 1.88, 3.63, 0.934, 
0.244, 2.55, 0.136, 13.784, 0.182, 0.27, 1.538, 0.116, 0.012, 
1.712, 3.8), fldMeasuringInterval = c(NA, 10L, NA, NA, 10L, NA, 
10L, 10L, 10L, NA, NA, NA, 10L, 10L, 10L, 10L, 10L, NA, NA, 10L, 
10L, 10L, NA, 10L, NA, 10L, NA, 10L, NA, 10L, 10L, NA, NA, NA, 
10L, 10L, NA, NA, NA, NA, 10L, 10L, NA, 10L, 10L, 10L, NA, NA, 
NA, 10L, 10L, 10L, NA, NA, 10L, 10L, NA, 10L, 10L, 10L, 10L, 
NA, 10L, 10L, NA, NA, NA, NA, 10L, 10L), fldMeasuringOperator = c(NA, 
"DFE", NA, NA, "DFE", NA, "DFE", "DFE", "DFE", NA, NA, NA, "DFE", 
"DFE", "DFE", "DFE", "DFE", NA, NA, "DFE", "DFE", "DFE", NA, 
"DFE", NA, "DFE", NA, "DFE", NA, "DFE", "DFE", NA, NA, NA, "MSL", 
"MSL", NA, NA, NA, NA, "MSL", "MSL", NA, "MSL", "MSL", "MSL", 
NA, NA, NA, "MSL", "MSL", "MSL", NA, NA, "MSL", "MSL", NA, "MSL", 
"MSL", "MSL", "MSL", NA, "MSL", "MSL", NA, NA, NA, NA, "MSL", 
"MSL"), fldCruiseStationNumber = c(59L, 59L, 59L, 59L, 59L, 59L, 
59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 
59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 59L, 60L, 
60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 
60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 60L, 
60L, 60L, 60L, 60L, 60L, 60L, 61L, 61L, 61L, 61L, 61L, 61L), 
    fldMainSpeciesCode = c("BEN", "BIB", "BOF", "CDT", "COD", 
    "CTC", "CUR", "DGS", "DGS", "EDC", "GUG", "GUR", "HAD", "HKE", 
    "JOD", "LEM", "LEM", "LSD", "LSS", "MEG", "MEG", "MON", "PLA", 
    "PLE", "POD", "SDR", "TUB", "WAF", "WHB", "WHG", "WIT", "BEN", 
    "BOF", "CDT", "COD", "CUR", "EDC", "GFB", "GUG", "GUR", "HAD", 
    "HKE", "HOM", "JOD", "LEM", "LEM", "LSD", "LSS", "MAC", "MEG", 
    "MEG", "MON", "MUR", "NSQ", "PLE", "PLE", "POD", "POL", "SMH", 
    "TBR", "WAF", "WHB", "WHG", "WIT", "BEN", "BOF", "CDT", "CTC", 
    "CUR", "DGS")), row.names = c(NA, 70L), class = "data.frame")

需要同时满足以下两个筛选条件进行子集化:

  • fldCruiseStationNumber 列值为59或61
  • fldMainSpeciesCode 列值为MEG、MON、PLE或WHG

方法一:基础R原生操作

方式1:直接索引

利用%in%匹配多值,用&连接两个条件,直接筛选行:

subset_catch <- catch[catch$fldCruiseStationNumber %in% c(59, 61) & 
                        catch$fldMainSpeciesCode %in% c("MEG", "MON", "PLE", "WHG"), ]

方式2:subset()函数

用内置的subset()函数,语法更简洁:

subset_catch <- subset(catch, 
                       fldCruiseStationNumber %in% c(59, 61) & 
                       fldMainSpeciesCode %in% c("MEG", "MON", "PLE", "WHG"))

方法二:dplyr包(tidyverse风格)

如果常用tidyverse工具链,filter()函数的可读性更强:

# 先加载dplyr包
library(dplyr)

subset_catch <- catch %>%
  filter(fldCruiseStationNumber %in% c(59, 61),
         fldMainSpeciesCode %in% c("MEG", "MON", "PLE", "WHG"))

注:这里用逗号分隔条件等价于&,逻辑上是同时满足两个条件。


内容的提问来源于stack exchange,提问作者Cláudio Siva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 08:04:55