R语言使用if else结合filter按多条件筛选data.frame数据
R数据框多条件分支筛选实现方案
原代码错误原因
- 管道符
%>%已经将前序的df1传入filter()作为第一个操作对象,不需要在filter()内重复写df1 - 语法逻辑错误:
str_detect()的第二个参数应为待匹配的字符串,原代码将FAO >=4的逻辑判断写入str_detect()参数内,导致参数类型不匹配报错。
正确实现代码
方案1:if_else分支判断(更贴合需求描述逻辑)
需要先加载tidyverse套件(包含dplyr和stringr):
library(tidyverse) # 筛选逻辑 result <- df1 %>% filter(if_else( condition = str_detect(sample_id, "3666"), true = FAO > 4, false = FAO > 20 ))
方案2:逻辑运算符直接组合
result <- df1 %>% filter( (str_detect(sample_id, "3666") & FAO > 4) | (!str_detect(sample_id, "3666") & FAO > 20) )
输出结果
运行上述任意代码后得到的结果如下,与预期完全一致:
sample_id FAO 1 SB024 100 2 3666-01 50 3 3666-02 5
内容的提问来源于stack exchange,提问作者zw_nz
相关产品推荐
相关产品推荐

