r - if else 使用过滤器 R
问题描述
我有一个df:
df1 <- data.frame(
sample_id = c('SB024', '3666-01', '3666-01', '3666-02'),
FAO = c(100,50,3,5)
> df1
sample_id FAO
1 SB024 100
2 3666-01 50
3 3666-01 3
4 3666-02 5
我想做一个像这样的过滤器:如果样本 id 包含 3666 过滤器 FAO >4,否则过滤 FAO >20
所以输出将是:
sample_id FAO
1 SB024 100
2 3666-01 50
3 3666-02 5
在从此处阅读上一个问题后,我尝试了以下操作如何使用 dplyr 的 filter() 和 R-base 的 ifelse() 过滤数据框?:
df1%>%
+ filter(df1, str_detect(sample_id, "3666" & FAO >=4))
错误:filter()
输入有问题..1
。i 输入..1
是case
。x 输入..1$sample_id
必须是逻辑向量,而不是字符。
解决方案
您的尝试非常接近,但似乎存在一些语法问题;这应该可以解决您的问题:
library(tidyverse)
df1 <- data.frame(
sample_id = c('SB024', '3666-01', '3666-01', '3666-02'),
FAO = c(100,50,3,5)
)
df1 %>%
filter(ifelse(str_detect(sample_id, "3666"), FAO >=4, FAO >20))
#> sample_id FAO
#> 1 SB024 100
#> 2 3666-01 50
#> 3 3666-02 5
df1 %>%
filter(ifelse(str_detect(sample_id, "XXXX"), FAO >=4, FAO >20))
#> sample_id FAO
#> 1 SB024 100
#> 2 3666-01 50
由reprex 包于 2021-11-05 创建(v2.0.1)
推荐阅读
- java - 如果将Java中的JSON序列化为JSON作为对象,如何反序列化特定类型的对象?
- python-3.x - 如果有 3 个用户选择,则为单个?(我是新手)
- react-native - auth:api 中间件在使用 laravel 的实时服务器中不起作用
- javascript - Thymeleaf/JavaScript 参数
- c++ - 内部选定排序循环的并行性跳过了几个数字
- mysql - MYSQL 触发器 - 存储更新的表数据
- python - 为许多属性实现 setter 和 getter 的干净方法?
- ios - 如何在 QuickBlox 通话期间截取正在进行的视频
- python - 如何在绘图中添加小时、分钟、日和月计数?
- json - JAX-RS Json 响应在一行中