2017-08-09 44 views
0

我有以下數據集嵌套的if else中的R - SAT/ACT考試

df <- data.frame(student=c(1,2,3,4,5,6,7,8,9), sat=c(365,0,545,630,385,410,0,655,0), act=c(28,20,0,0,16,17,35,29,21)) 

student  sat act 
    1  365 28 
    2   0 20 
    3  545  0 
    4  630  0 
    5  385 16 
    6  410 17 
    7   0 35 
    8  655 29 
    9   0 21 

,我想創建一個新的領域具備以下條件

如果有SAT成績> 0使用SAT分數 如果SAT = 0,則使用規則here將ACT轉換爲SAT分數。 。(當有在SAT分數的範圍內,我只是用中位數

ACT SAT 
8 200 
9 210 
10 220 
11 225 
12 250 
13 285 
14 325 
15 360 
16 385 
17 410 
18 440 
19 465 
20 485 
21 505 
22 525 
23 545 
24 560 
25 575 
26 595 
27 615 
28 635 
29 655 
30 675 
31 700 
32 725 
33 750 
34 775 
35 790 
36 800 

這是一個ifelse語句赫克我已經試過這樣:

df$newgrade=-ifelse(ACT=8,200, ifelse (ACT=9,210, ifelse(ACT=10,220, ifelse (ACT=11,225, ACT=12,250, ifelse(ACT=13,285, ifelse (ACT=14,325, ACT=15,D, ifelse(ACT=16,C, ifelse (ACT=17,B, ACT=18,D, ifelse(ACT=19,C, ifelse (ACT=20,B, ACT=21,D, ifelse(ACT=22,C, ifelse (ACT=23,B, ACT=24,D, ifelse(ACT=25,C, ifelse (ACT=26,B, ACT=27,D, ifelse(ACT=28,C, ifelse (ACT=29,B, ACT=30,D, ifelse(ACT=31,C, ifelse (ACT=32,B, ACT=33,D, ifelse(ACT=34,C, ifelse (ACT=35,B, ACT=36,D)))))))))))))))))))) 

我試圖按照在這個頁面的底部,但例如,它沒有工作。

有沒有人對如何最好地實現這個新領域的任何想法?

謝謝您可能會帶來任何幫助。

+1

什麼是第二個數據框?,轉換表?假設第二個表是轉換data.frame,你可以試試:'df $ newgrade <-ifelse(df $ sat == 0,conversion $ SAT [match(df $ act,conversion $ ACT)] ,df $ sat)' –

+0

沒有一個,但我可以輕鬆將SAT/ACT轉換錶轉換爲一個。讓我們稱之爲轉換?會有幫助嗎?我會在哪裏放置它? – Walker

+0

或者是您在此處列出的第二張轉換表?對不起,我不得不重讀 – Walker

回答

1

df$sat==0時,我們打電話給conversion轉換值。喲可以做這樣的事情:

df$newgrade<-ifelse(df$sat == 0, conversion$SAT[match(df$act, conversion$ACT)], df$sat)

編輯:如果您想包括另一個條件df$sat ==0df$act==0,然後df$new grade==0,你可以再加上一個ifelse:

df$newgrade<-ifelse(df$sat == 0 & df$act == 0, 0, ifelse(df$sat == 0, conversion$SAT[match(df$act, conversion$ACT)], df$sat))

或使用df[is.na(df)]<-0創建列df$newgrade後,因爲在這些情況下(df$sat ==0df$act==0),您將擁有NDA

+0

這工作!謝謝 – Walker