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

R: iterating through unique values of a vector in for loop

我是 R 的新手,在遍历向量的唯一元素时遇到了一些问题。我有一个包含 700 位不同教师的数据框 "School"。每个老师有大约40名学生。

我希望能够遍历每位教师,为 his/her 学生随时间的平均分数创建图表,将图表保存在文件夹中并自动将该文件夹通过电子邮件发送给该老师。

我才刚刚开始,在设置 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  

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

?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
}

我认为你有 3 个问题,需要单独提问,我该如何:

  1. 创建图表
  2. 自动邮件输出
  3. 计算基于组的子集均值

第三个,我喜欢用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))

如果您的数据很长而不是很宽,您可以对每个得分列执行此操作(然后绘制图表),您还可以将日期 ('November'、'Dec') 作为一个组添加到括号,或:

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

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