【问题标题】:ifelse statement based on vector of conditions in r基于 r 中条件向量的 ifelse 语句
【发布时间】:2020-06-29 20:29:05
【问题描述】:

假设我有一个简单的数据框,其中包含这样的 ID 列表:

df<-tibble(id=1:5)

然后我有一个这样的 ID 向量:

ids<-3:7

我正在尝试编写一个ififelse 语句来检查每个id 是否包含在ids 向量中的任何ID 中。结果会是这样的:

df1<-tibble(id=1:5,included=c("no","no","yes","yes","yes"))
# A tibble: 5 x 2
     id included
  <int> <chr>   
    1     no      
    2     no      
    3     yes     
    4     yes     
    5     yes

【问题讨论】:

    标签: r dataframe if-statement


    【解决方案1】:

    ifelse 函数适用于向量。您可能正在寻找 %in% 运算符?你试过谷歌吗?

    df$included <- ifelse(df$id %in% ids, "yes", "no")
    

    【讨论】:

    • 是的,我在 Google 上搜索并尝试了一些使用 %in% 运算符的不同解决方案,但无法正常工作。
    【解决方案2】:

    R base:

    df$included <- df$id %in% ids
    df
    # A tibble: 5 x 2
         id included
      <int> <lgl>   
    1     1 FALSE   
    2     2 FALSE   
    3     3 TRUE    
    4     4 TRUE    
    5     5 TRUE
    

    【讨论】:

      【解决方案3】:

      我们可以使用%in% 创建一个逻辑向量并根据ifelsecase_when 或仅通过索引替换值

      library(dplyr)
      df <- df %>%
          mutate(included = case_when(id  %in% ids ~  "yes", TRUE ~ "no"))
      df
      

      【讨论】:

      • 哈哈,今天你的超能力正在下滑@akrun,你的意思是df %&gt;% mutate(included = case_when(id %in% ids ~ "yes", TRUE ~ "no"))
      • @ChuckP 对不起,有一个错字,因为我没有检查测试它
      【解决方案4】:

      您可以使用%in% 对包含noyes 的向量进行子集化:

      df$included <- c("no", "yes")[1 + df$id %in% ids]
      ## A tibble: 5 x 2
      #     id included
      #  <int> <chr>   
      #1     1 no      
      #2     2 no      
      #3     3 yes     
      #4     4 yes     
      #5     5 yes     
      

      【讨论】:

        猜你喜欢
        • 2017-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-05
        • 1970-01-01
        • 2021-11-27
        相关资源
        最近更新 更多