【问题标题】:Subsetting a data frame based on a logical condition on a subset of rows根据行子集上的逻辑条件对数据框进行子集化
【发布时间】:2017-09-19 12:01:04
【问题描述】:

我试图想出一个简单的解决方案来解决后续问题。这是最小的工作示例:

data <- data.frame(subject = c('Math', 'English', 'French', 'English'),
                   grade = c(1, 3, 5, 4))

我想要一个比较英语成绩并返回一个逻辑向量的函数,该逻辑向量对于英语等级最高的行为 TRUE,对于所有其他行为 FALSE。在这种情况下[1] FALSE FALSE FALSE TRUE

【问题讨论】:

    标签: r conditional-statements subset logical-operators


    【解决方案1】:

    我们可以得到max每个'subject'的'grade'和ave比较'grade'得到一个逻辑索引并且检查'subject'是否也是'English'

    with(data, ave(grade, subject, FUN = max)==grade & subject == "English") 
    #[1] FALSE FALSE FALSE  TRUE
    

    【讨论】:

    • 这很完美!直到现在我才明白 ave() 的微妙之处。
    【解决方案2】:

    使用 ifelse 条件,一种方法如下。

    library(dplyr)
    
    data %>%
    mutate(check = if_else(subject == "English" & grade == max(grade[subject == "English"]),
           TRUE,
           FALSE))
    
    #  subject grade check
    #1    Math     1 FALSE
    #2 English     3 FALSE
    #3  French     5 FALSE
    #4 English     4  TRUE
    

    【讨论】:

      【解决方案3】:

      使用 ifelse() 命令的解决方案的另一种变体:

      data <- data.frame(subject = c('Math', 'English', 'French', 'English'),
                         grade = c(1, 3, 5, 4))
      
      output <-ifelse(data[,1] == "English" & data[,2] == 4, TRUE, FALSE)
      
      > output
      [1] FALSE FALSE FALSE  TRUE
      

      【讨论】:

        猜你喜欢
        • 2022-06-18
        • 2013-08-15
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 2020-04-15
        • 1970-01-01
        • 2016-10-28
        • 1970-01-01
        相关资源
        最近更新 更多