【问题标题】:multiple ifelse with and and or conditions in RR中带有and和or条件的多个ifelse
【发布时间】:2018-02-23 14:04:41
【问题描述】:

我有一个数据集,我想创建一个多重 ifelse 语句。 我想知道这个人/身份证在 2011 年和 2012 年是否住在大城市(伦敦或巴黎)。有什么建议可以通过多个 ifelse 获得吗?

 id<-  c(1,1,2,2,3)
 location <- c('london', 'paris', 'london', 'kathmanadu','newyork')
 year<- c(2011, 2010, 2012, 2011, 2010)
 df<- data.frame(location, year)
 df$bigcity<- ifelse(df$location=='london'| df$location=='paris' & 
 df$year==2011| df$year==2012, 1, 0)

【问题讨论】:

  • 嗯......不清楚你在问什么......不正是你在代码的最后一行所做的吗? “多个 ifelse”是什么意思?
  • 很难说这是否按照你所说的那样工作......你的意思是你想要:ifelse((df$location=='london'| df$location=='paris)' &amp; (df$year==2011| df$year==2012), 1, 0) 带有额外的括号以更清楚地定义 AND/OR 逻辑?
  • 我写的代码不起作用它没有执行 and 语句
  • 我编写的代码将执行 AND 语句 - 并且比多个 ifelse 语句更清晰。

标签: r if-statement dplyr tidyr


【解决方案1】:

我认为多个 ifelse 是指嵌套的 ifelse。如果是这种情况,这里有一个解决方案

df$bigcity <- ifelse(grepl("london|paris", df$location), ifelse(grepl("2011|2012", df$year), 1, 0), 0)

我在这里所做的是,如果第一个条件为真,则将第二个条件放在 TRUE 参数中。

【讨论】:

    【解决方案2】:

    使用 data.table 的结果如下:

    library(data.table)
    setDT(df)
    df[,location := ifelse(location %in% c('paris','london') & year %in% c(2011,2012),1,0)]
    
       id   location year new_value
    1:  1     london 2011         1
    2:  1      paris 2010         0
    3:  2     london 2012         1
    4:  2 kathmanadu 2011         0
    5:  3    newyork 2010         0
    

    【讨论】:

      【解决方案3】:

      使用filterdplyr 解决方案,因为我认为它比嵌套的ifelse 更具可读性

       id<-  c(1,1,2,2,3)
       location <- c('london', 'paris', 'london', 'kathmanadu','newyork')
       year<- c(2011, 2010, 2012, 2011, 2010)
       df<- data.frame(id, location, year)
      

      我想知道这个人/id 在 2011 年和 2012 年是否住在大城市(伦敦或巴黎)

      library(dplyr)
      df %>% 
        filter(location %in% c('london', 'paris')) %>%
        filter(year %in% c(2011, 2012))
      
      #   id location year
      #1  1   london 2011
      #2  2   london 2012
      

      【讨论】:

        猜你喜欢
        • 2017-07-29
        • 1970-01-01
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 2021-05-05
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        相关资源
        最近更新 更多