【发布时间】:2020-10-01 06:45:55
【问题描述】:
我想为每个学生选择最好的 2 个测验考试结果(最高分和最高出勤率),并消除 3 个测验考试中最弱的测验。我们可能会说,我想从每行的 3 列中选择最好的 2 列。然后新建一个数据框有StudentID, ExamQuiz1, ExamQuiz2, ExamMidterm and ExamFinal。我可以通过循环遍历表格来处理它,这在我认为 R 中效率太低了。处理 dplyr 包问题的有效方法是什么?
极简数据
伪数据框放置在底部。 “G”表示学生没有参加考试,所以我想保留该值而不是将其替换为 0。例如,如果他使用 G (ExamQuiz1)、0 (ExamQuiz2 ), 10 (ExamQuiz3),我必须选择 0 作为ExamQuiz1 和 10 作为ExamQuiz2 用于测验输入。因为出勤方面,0 比 G 好。如果有结果(带数字),则表示学生已经参加。 ExamQuiz1, ExamQuiz2, ExamMidterm and ExamFinal 列下的每个单元格都可能有数字(考试结果)或字符值(“G”> 未参加)。我不会触及 ExamMidterm 和 ExamFinal 列的任何值。主要思想只与ExamQuiz1, ExamQuiz2, and ExamQuiz3的列有关。
StudentID ExamQuiz1 ExamQuiz2 ExamQuiz3 ExamMidterm ExamFinal
1 11111 0 G G G G
2 22222 0 G 43 71 18
3 33333 0 G G G G
4 44444 0 G G G G
5 55555 60 38 G 64 27
6 66666 0 G G G G
编辑:仍然有一些评论者不断指出数据不整洁。正如我在 cmets 上解释的那样,这样做的原因或您提供的整理方法对我来说没有意义。出于这个原因,我在问题主体上放了更多的解释,而不改变数据的结构。
【问题讨论】:
-
出勤率最高是什么意思?每个学生要么参加测验,要么没有参加测验,那么每个学生的出勤率如何才能达到最高呢?您的数据不是tidy。虽然对于像这样的玩具示例来说这并不重要,但保持所有数据整洁是一个好习惯。从长远来看,它将为您节省时间!
-
@Limey 如果您仔细阅读,您会发现“G”表示学生没有参加。出于这个原因,如果他得到这个场景有 10、G、0,我必须选择 10 和 0 作为测验输入。因为出勤方面0比G好。如果有结果(带数字),则表示学生已经参加。很简单,数据也很干净!
-
嗨 @ozturkib,光顾试图在 cmets 中帮助您的人不太可能导致您的问题得到回答。
-
@IanCampbell 我一点也不光顾任何人。我只是在解释每一个细节,而不是接受带有给定理由的评论。就是这样。
-
@ChuckP 澄清一下,每一列都可能有数字(考试结果)或字符值(“G” > 未参加)。
标签: r dataframe join merge dplyr