R:迭代for循环中向量的唯一值

时间:2015-02-02 05:23:09

标签: r loops iterator

我是R的新手,我在迭代矢量的唯一元素时遇到了一些麻烦。我有一个数据框“学校”,有700名不同的老师。每位老师有大约40名学生。

我希望能够遍历每位老师,为他/她的学生创建一个平均分数的图表,将图表保存在一个文件夹中,并自动将该文件夹发送给该老师。

我刚开始使用并且无法设置for循环。在Stata中,我知道如何循环遍历列表中的每个唯一元素,但是在R中执行此操作时遇到了麻烦。任何帮助都将受到赞赏。

School$Teacher     School$Student    School$ScoreNovember    School$ScoreDec    School$TeacherEmail  
     A                1                35                     45                A@school.org  
     A                2                43                     65                A@school.org    
     B                1                66                     54                B@school.org  
     A                3                97                     99                A@school.org  
     C                1                23                     45                C@school.org  

2 个答案:

答案 0 :(得分:1)

您的问题似乎有点模糊,看起来您希望我们编写您的整个项目。你能分享你到目前为止所做的事情以及你在哪里挣扎吗?

请参阅?subset

School=data.frame(Teacher=c("A","B"), ScoreNovember=10:11, ScoreDec=13:14)

for (teacher in unique(School$Teacher)) { 
    teacher_df=subset(School, Teacher==teacher)
    MeanScoreNovember=mean(teacher_df$ScoreNovember)
    MeanScoreDec     =mean(teacher_df$ScoreDec)
    # do your plot
    # send your email
}

答案 1 :(得分:0)

我认为你有3个问题需要单独的问题,我该怎么做:

  1. 创建图表
  2. 自动发送电子邮件
  3. 根据组
  4. 计算子集均值

    对于第三个,我喜欢使用plyr包,其他人会推荐data.tabledplyr个包。您也可以使用基地的aggregate。得到老师的意思:

    library(plyr)
    ddply(School,.(Teacher),summarise,Nov_m=mean(ScoreNovember))
    

    如果您希望每位学生每位教师等,只需在列之间添加,例如:

    library(plyr)
    ddply(School,.(Teacher,Student),summarise,Nov_m=mean(ScoreNovember))
    

    如果您的数据很长而不是宽,您可以为每个得分列执行此操作(然后绘制图表),您也可以将日期(“11月”,“12月”)作为一组添加到括号中,或者:< / p>

    library(plyr)
    ddply(School,.(Teacher,Student),summarise,Nov_m=mean(ScoreNovember),Dec_m=mean(ScoreDec))
    

    看看这对第3个是否有帮助,但也要考虑将问题分开。