基于行子集上的逻辑条件来子集数据帧

时间:2017-09-19 12:01:04

标签: r conditional-statements subset logical-operators

我试图想出一个关于followig问题的简单解决方案。以下是最低工作示例:

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

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

3 个答案:

答案 0 :(得分:5)

我们可以获得max'等级'每个'主题'与ave将其与'成绩'进行比较,以获得逻辑索引并检查'主题'是否也是'英语'< / p>

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

答案 1 :(得分: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

答案 2 :(得分:1)

使用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