2017-09-19 26 views
3

私はfollowig問題の簡単な解決策を考え出しました。行のサブセットの論理条件に基づいてデータフレームをサブセット化する

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

私はEnlishの成績を比較し、他のすべての行のための最高の英語のグレードを持つ行についてTRUEとFALSE持つ論理ベクトルを返す関数をしたい:ここでは最小実施例です。この場合[1] FALSE FALSE FALSE TRUE

ありがとうございました。私たちは、aveで「件名」あたりmax「グレード」を取得することができます

答えて

5

は論理インデックスを取得し、「対象」はまた、使用して「英語」

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

これは完璧に動作します!私は今までave()の微妙なことを理解していませんでした。 – DocHoliday

2

であるかどうかを確認するために「グレード」でそれを比較しますifelse条件は、次のようになります。 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 
1

別のバリエーション:

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 
関連する問題