2013-02-14 120 views
0

我想開發一個函數來自動執行等級分析過程。使用條件計數創建函數

在一列中,有一個小時的輔導學生有號碼,並在下一列是他或她的品位。對於三組,我必須計算As(A + s和A-s),Bs(B + s和A-s),Cs,Ds,Fs,Ws的數量,並計算每個組的GPA。這些小組是那些有6小時或更長時間,沒有小時的人,以及那些有輔導的人的總數。

是否有可能創建中的R的簡單功能,諸如等級(小時,馬克),類似於摘要()功能,這將打印三類使用以下信息對每一個:

學生與任何類型的
  1. 數目(包括As,As和A + S,等)A的,B,C,d,F,W
  2. 計算GPA:(4 * A + 3 * B + 2 * C + 1 * D + 0 * F + 0 * W)/(A + B + C + D + F-W)

這甚至有可能在R?我會在哪裏開始?

謝謝。

+1

首先發佈一個示例數據集。 – 2013-02-14 23:00:15

+0

'小時= C(0,5,6,10,0);等級= C( 「F」, 「A - 」, 「A」, 「A +」, 「C - 」)' – Bornin1992 2013-02-14 23:31:31

+0

請學會使用編輯功能。 – 2013-02-14 23:32:12

回答

0
> Hours=c(0,5,6,10,0);Grades=c("F","A-","A","A+","C-") 
> grpHrs <- Hours >= 6 
> table(substr(Grades, 1,1), grpHrs) 
    grpHrs 
    FALSE TRUE 
    A  1 2 
    C  1 0 
    F  1 0 

很難知道需要什麼樣的GPA計算,因爲它明確表示這些是不同的學生。如果這些全部來自同一名學生,則:

grdABCDFW <- substr(Grades,1,1) 



sum(4* (grdABCDFW=="A")+ 
    3*(grdABCDFW=="B")+ 
    2*(grdABCDFW=="C")+ 
    1*(grdABCDFW=="D")+ 
    0*(grdABCDFW=="F")+ 0*(grdABCDFW=="W"))/ 
       length(Grades[ !is.na(Grades)]) 
#[1] 2.8 

給您的評論。也許:

Hours.time=function(Hours, Grades, cutpt){ 
       grpHrs <- Hours >= cutpt 
       tbl <- table(substr(Grades,1,1), grpHrs) 
       colnames(tbl) <- c( paste("Fewer than ", cutpt), 
            paste(cutpt, "or more")) 
        tbl } 
Hours.time(Hours, Grades,6) 
#------- 
    grpHrs 
    Fewer than 6 6 or more 
    A    1   2 
    C    1   0 
    F    1   0 
+0

感謝您的回覆。這很好用!有什麼辦法可以把它放在聯合功能中嗎?我做了一個,'Hours.6 =功能(時間,等級,grpHrs){grpHrs <-Hours> = 6;表(SUBSTR(等級,1,1),grpHrs)}',但我怎麼能做到這一點,使我的一切寫的是小時,然後給出兩張表,一張> = 6小時,一張帶0小時?乾杯! – Bornin1992 2013-02-15 18:38:02

+0

注意:您的編輯器正在插入不可打印的字符。你應該考慮使用標準的文本編輯器。 – 2013-02-15 18:59:23