【问题标题】:if else with filter Rif else 使用过滤器 R
【发布时间】:2021-11-05 04:35:33
【问题描述】:

我有一个 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

在阅读了How do I filter a data frame with dplyr's filter() and R-base's ifelse()? 的上一个问题后,我尝试了以下操作:

df1%>% 
+   filter(df1, str_detect(sample_id, "3666" & FAO >=4))

错误:filter() 输入 ..1 有问题。 i 输入..1case。 x 输入..1$sample_id 必须是逻辑向量,而不是字符。

【问题讨论】:

    标签: r


    【解决方案1】:

    您的尝试非常接近,但似乎存在一些语法问题;这应该可以解决您的问题:

    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 package 创建于 2021-11-05 (v2.0.1)

    【讨论】:

      猜你喜欢
      • 2021-02-25
      • 1970-01-01
      • 2020-04-09
      • 2021-04-16
      • 2019-09-20
      • 2013-12-25
      • 2019-12-11
      • 1970-01-01
      • 2021-02-13
      相关资源
      最近更新 更多