2013-02-14 108 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